Module: DarianCalendar

Defined in:
lib/darian_calendar.rb,
lib/darian_calendar/date.rb,
lib/darian_calendar/time.rb,
lib/darian_calendar/version.rb

Overview

This Ruby library converts earth time to mars time and back again. You can choose between 5 variants of the Darian calendar system; Martiana, Defrost, Areosynchronous, Hensel and Aqua. See http://github.com/marsec/darian_calendar for more Information. It's based on the JavaScript Converter which was developed by Alan Hensel and Thomas Gangale. (http://pweb.jps.net/~tgangale/mars/converter/calendar_clock.htm)

Defined Under Namespace

Modules: CalendarTypes Classes: Date, Time

Constant Summary collapse

MARS_TO_EARTH_DAYS =
1.027491251
EPOCH_OFFSET =
587744.77817
SECONDS_A_DAY =
86400.0
ROUND_UP_SECOND =
1/SECONDS_A_DAY
E_DAYS_TIL_UNIX =
719527.0
SOL_NAMES =
{
  martiana: ['Sol Solis', 'Sol Lunae', 'Sol Martis', 'Sol Mercurii', 'Sol Jovis', 'Sol Veneris', 'Sol Saturni'],
  defrost: ['Axatisol', 'Benasol', 'Ciposol', 'Domesol', 'Erjasol', 'Fulisol', 'Gavisol'],
  areosynchronous: ['Heliosol', 'Phobosol', 'Deimosol', 'Terrasol', 'Venusol', 'Mercurisol', 'Jovisol']
}
MONTH_NAMES =
{
  martiana: ['Sagittarius', 'Dhanus', 'Capricornus', 'Makara', 'Aquarius', 'Kumbha', 'Pisces', 'Mina', 'Aries', 'Mesha', 'Taurus', 'Rishabha', 'Gemini', 'Mithuna', 'Cancer', 'Karka', 'Leo', 'Simha', 'Virgo', 'Kanya', 'Libra', 'Tula', 'Scorpius', 'Vrishika'],
  defrost: ['Adir', 'Bora', 'Coan', 'Deti', 'Edal', 'Flo', 'Geor', 'Heliba', 'Idanon', 'Jowani', 'Kireal', 'Larno', 'Medior', 'Neturima', 'Ozulikan', 'Pasurabi', 'Rudiakel', 'Safundo', 'Tiunor', 'Ulasja', 'Vadeun', 'Wakumi', 'Xetual', 'Zungo'],
  hensel: ['Vernalis', 'Duvernalis', 'Trivernalis', 'Quadrivernalis', 'Pentavernalis', 'Hexavernalis', 'Aestas', 'Duestas', 'Triestas', 'Quadrestas', 'Pentestas', 'Hexestas', 'Autumnus', 'Duautumn', 'Triautumn', 'Quadrautumn', 'Pentautumn', 'Hexautumn', 'Unember', 'Duember', 'Triember', 'Quadrember', 'Pentember', 'Hexember']
}
VERSION =
'1.1.0'

Class Method Summary collapse

Class Method Details

.is_mars_leap_year?(year) ⇒ Boolean

Returns true if the given martian year is a leap year

Parameters:

  • year (Integer)

    martian year

Returns:

  • (Boolean)

    true if the given year is a leap year



69
70
71
72
73
74
75
76
# File 'lib/darian_calendar.rb', line 69

def is_mars_leap_year?(year)
  return false if year.nil?
  return true if (year % 500) == 0
  return false if (year % 100) == 0
  return true if (year %  10) == 0
  return false if (year % 2) == 0
  return true
end

.now(type = CalendarTypes::MARTIANA) ⇒ DarianCalendar::Time

Returns the current mars time. Shortcut for 'DarianCalendar::Time.now'

Parameters:

Returns:



55
56
57
# File 'lib/darian_calendar.rb', line 55

def now(type=CalendarTypes::MARTIANA)
  DarianCalendar::Time.now(type)
end

.sols_from_earth(earth_date_time) ⇒ Float

Returns the total number of martian sols for an earth date or time

Parameters:

  • earth_date_time (Date/Time)

    Earth date or time

Returns:

  • (Float)

    number of sols



45
46
47
48
49
50
# File 'lib/darian_calendar.rb', line 45

def sols_from_earth(earth_date_time)
  seconds = earth_date_time.is_a?(::Date) ? earth_date_time.strftime("%s").to_f : earth_date_time.to_f
  days = (seconds / SECONDS_A_DAY) + E_DAYS_TIL_UNIX
  sols = (days - EPOCH_OFFSET) / MARS_TO_EARTH_DAYS
  return sols
end

.today(type = CalendarTypes::MARTIANA) ⇒ DarianCalendar::Time

Returns the current mars time. Shortcut for 'DarianCalendar::Time.now'

Parameters:

Returns:



62
63
64
# File 'lib/darian_calendar.rb', line 62

def today(type=CalendarTypes::MARTIANA)
  DarianCalendar::Date.today(type)
end