Time

From Escaping Eden
Revision as of 22:30, 11 October 2023 by Yamamushi (talk | contribs)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to navigationJump to search

Note: This article is subject to change and is based on current development. This should be used as a rough guide, but not a source of absolute truth.

Time in Eden operates on a different calendar and hour system than real-world time.

A year in Eden is broken up until 18 months, with each consisting of 6 weeks, and 12 days per week.

1 Day in Eden consists of 27 earth hours, each consisting of 60 minutes, and 60 seconds accordingly.

The creation time of the Eden Universe begins at 12:00AM January 1st, 2021 UTC. // It is relative to the home capital city of Eden, Freeport.

Months

  • Capris
  • Yuena
  • Gabriel
  • Zebulon
  • Yul
  • Eden
  • Mikael
  • Leonis
  • Avrila
  • Sedrah
  • Bonafu
  • Venu
  • Tayros
  • Sycorax
  • Karkat
  • Terezi
  • Vriska
  • Equius


Days of Week

  • Sandu
  • Moudu
  • Tudu
  • Wendu
  • Thurdu
  • Fradu
  • Sadu
  • Landu
  • Zedu
  • Kadu
  • Vedu
  • Bedu

Source Code

package edenutil

import (
	"fmt"
	"time"
)

// These are a collection of utilities for working with Time as it relates to the world of Eden.

// EdenMonth is an int type that represents a month in the world of Eden.
// An Eden Calendar Month is broken into 6 weeks, with a week being broken into 12 days.
type EdenMonth int64

// An Eden Calendar Year is broken into 18 months.
const (
	EdenMonthCapris EdenMonth = iota
	EdenMonthYuena
	EdenMonthGabriel
	EdenMonthZebulon
	EdenMonthYul
	EdenMonthEden
	EdenMonthMikael
	EdenMonthLeonis
	EdenMonthAvrila
	EdenMonthSedrah
	EdenMonthBonafu
	EdenMonthVenu
	EdenMonthTavros
	EdenMonthSycorax
	EdenMonthKarkat
	EdenMonthTerezi
	EdenMonthVriska
	EdenMonthEquius
)

// String returns a string representation of the EdenMonth.
func (em EdenMonth) String() string {
	switch em {
	case EdenMonthCapris:
		return "Capris"
	case EdenMonthYuena:
		return "Yuena"
	case EdenMonthGabriel:
		return "Gabriel"
	case EdenMonthZebulon:
		return "Zebulon"
	case EdenMonthYul:
		return "Yul"
	case EdenMonthEden:
		return "Eden"
	case EdenMonthMikael:
		return "Mikael"
	case EdenMonthLeonis:
		return "Leonis"
	case EdenMonthAvrila:
		return "Avrila"
	case EdenMonthSedrah:
		return "Sedrah"
	case EdenMonthBonafu:
		return "Bonafu"
	case EdenMonthVenu:
		return "Venu"
	case EdenMonthTavros:
		return "Tavros"
	case EdenMonthSycorax:
		return "Sycorax"
	case EdenMonthKarkat:
		return "Karkat"
	case EdenMonthTerezi:
		return "Terezi"
	case EdenMonthVriska:
		return "Vriska"
	case EdenMonthEquius:
		return "Equius"
	default:
		return ""
	}
}

// EdenDay is an int type that represents a day in the world of Eden.
// An Eden Day is broken into 27 hours, with an hour being broken into 60 minutes, a minute 60 seconds, etc.
type EdenDay int64

const (
	EdenDaySandu EdenDay = iota
	EdenDayMoudu
	EdenDayTudu
	EdenDayWendu
	EdenDayThurdu
	EdenDayFradu
	EdenDaySadu
	EdenDayLandu
	EdenDayZedu
	EdenDayKadu
	EdenDayVedu
	EdenDayBedu
)

// String returns a string representation of the EdenDay.
func (ed EdenDay) String() string {
	switch ed {
	case EdenDaySandu:
		return "Sandu"
	case EdenDayMoudu:
		return "Moudu"
	case EdenDayTudu:
		return "Tudu"
	case EdenDayWendu:
		return "Wendu"
	case EdenDayThurdu:
		return "Thurdu"
	case EdenDayFradu:
		return "Fradu"
	case EdenDaySadu:
		return "Sadu"
	case EdenDayLandu:
		return "Landu"
	case EdenDayZedu:
		return "Zedu"
	case EdenDayKadu:
		return "Kadu"
	case EdenDayVedu:
		return "Vedu"
	case EdenDayBedu:
		return "Bedu"
	default:
		return ""
	}
}

// EdenTime is a type that is "similar", a term used loosely, to time.Time, but as relates to the world of Eden.
// The creation time of the Eden Universe begins at 12:00AM January 1st, 2021 UTC.
// It is relative to the home capital city of Eden, Freeport.
type EdenTime struct {
}

// NanoSecond Returns the nanoseconds since the creation of the Eden Universe.
func (et EdenTime) NanoSecond() int64 {
	// Current nanoseconds since 12:00AM January 1st, 2021 UTC
	nanoSecond := time.Since(time.Date(2021, 1, 1, 0, 0, 0, 0, time.UTC)).Nanoseconds()
	return nanoSecond
}

// MicroSecond Returns the microseconds since the creation of the Eden Universe.
func (et EdenTime) MicroSecond() int64 {
	// Current microseconds since 12:00AM January 1st, 2021 UTC
	microSecond := time.Since(time.Date(2021, 1, 1, 0, 0, 0, 0, time.UTC)).Microseconds()
	return microSecond
}

// Second Returns the seconds since the creation of the Eden Universe.
func (et EdenTime) Second() int64 {
	// Current seconds since 12:00AM January 1st, 2021 UTC
	second := int64(time.Since(time.Date(2021, 1, 1, 0, 0, 0, 0, time.UTC)).Seconds())
	return second
}

// Minute Returns the minutes since the creation of the Eden Universe.
func (et EdenTime) Minute() int64 {
	// Current minutes since 12:00AM January 1st, 2021 UTC
	minute := int64(time.Since(time.Date(2021, 1, 1, 0, 0, 0, 0, time.UTC)).Minutes())
	return minute
}

// Hour Returns the hours since the creation of the Eden Universe.
func (et EdenTime) Hour() int64 {
	// Current hours since 12:00AM January 1st, 2021 UTC
	hour := int64(time.Since(time.Date(2021, 1, 1, 0, 0, 0, 0, time.UTC)).Hours())
	return hour
}

// Day returns the days since the creation of the Eden Universe
// A day is broken into 27 hours, with an hour being broken into 60 minutes, a minute 60 seconds, etc.
func (et EdenTime) Day() int64 {
	// Current days since 12:00AM January 1st, 2021 UTC
	day := int64(time.Since(time.Date(2021, 1, 1, 0, 0, 0, 0, time.UTC)).Hours() / 24)
	return day
}

// Week returns the weeks since the creation of the Eden Universe
// A week is broken into 12 Eden days, with an Eden day being broken into 27 hours, with an hour being broken
// into 60 minutes, a minute 60 seconds, etc.
func (et EdenTime) Week() int64 {
	// Current weeks since 12:00AM January 1st, 2021 UTC
	week := et.Day() / 12
	return week
}

// Month returns the months since the creation of the Eden Universe
// A month is broken into 6 weeks, with a week being broken into 12 days.
func (et EdenTime) Month() int64 {
	// Current months since 12:00AM January 1st, 2021 UTC
	month := et.Week() / 6
	return month
}

// Year returns the years since the creation of the Eden Universe
// A year is broken into 18 months.
func (et EdenTime) Year() int64 {
	// Current years since 12:00AM January 1st, 2021 UTC
	year := et.Month() / 18
	return year
}

// EdenTimestamp returns the current hour, minute and second formatted as HH:MM:SS
func (et EdenTime) EdenTimestamp() (second int64, minute int64, hour int64) {
	// Current hour, minute and second since 12:00AM January 1st, 2021 UTC
	second = et.Second()
	minute = (second / 60)
	hour = (minute / 60)
	return second % 60, minute % 60, hour % 27
}

// EdenMonth Returns the current EdenMonth
func (et EdenTime) EdenMonth() EdenMonth {
	// The current month of the Eden Calendar
	month := et.Month() % 18
	return EdenMonth(month)
}

// EdenDay Returns the current EdenDay
func (et EdenTime) EdenDay() EdenDay {
	// The current day of the Eden Calendar
	day := et.Day() % 12
	return EdenDay(day)
}

// EdenDayString returns the current EdenDay as a string
func (et EdenTime) EdenDayString() string {
	// The current day of the Eden Calendar
	day := et.EdenDay()
	return day.String()
}

// CurrentTimeString returns the current time formatted as HH:MM:SS
func (et EdenTime) CurrentTimeString() string {
	second, minute, hour := et.EdenTimestamp()
	return fmt.Sprintf("%02d:%02d:%02d", hour, minute, second)
}

// TimeStamp String returns the current day time formatted as "<day> of the <week> Week, <month> in the Year <year> - HH:MM:SS"
func (et EdenTime) TimeStamp() string {
	// The current day of the Eden Calendar
	day := et.EdenDay().String()
	// The current week of the Eden Calendar
	week := et.Week() % 6
	// The current month of the Eden Calendar
	month := et.EdenMonth().String()
	// The current year of the Eden Calendar
	year := et.Year()
	// The current hour, minute and second since 12:00AM January 1st, 2021 UTC
	second, minute, hour := et.EdenTimestamp()

	return fmt.Sprintf("%s of Week %d in %s, Year %d - %02d:%02d:%02d", day, week, month, year, hour, minute, second)
}