Календарь майя на Яве - PullRequest
23 голосов
/ 29 марта 2010

Как я могу использовать календарь майя в Java?

Ответы [ 5 ]

6 голосов
/ 21 декабря 2012

Ваш календарь уже исчерпан?: -)

1 голос
/ 22 декабря 2012

Если вы действительно ищете решение, эта реализация Maya Calendar выглядит довольно хорошо.

Он реализует майя Цолькин в с использованием Java GregorianCalendar. Даты могут быть получены как в григорианском, так и в Цолькинском формате.

Вот основные части:

[...]
/** parses Date specified in Long Count format, e.g. "12.19.19.17.19" */
public void parseLongCountDate (String longCountDate) {
     String [] components = longCountDate.split("\\.");
     try {
          if (components.length != 5)
               throw new Exception("Expecting 5 numbers separated by dots");
          int baktuns = Integer.valueOf(components[0]);
          int katuns = Integer.valueOf(components[1]);
          int tuns = Integer.valueOf(components[2]);
          int winals = Integer.valueOf(components[3]);
          int kins = Integer.valueOf(components[4]);
          set (baktuns, katuns, tuns, winals, kins);
     } catch (Throwable e) {
          throw new IllegalArgumentException("Invalid long count date format: " 
          + e.getMessage());
     }
}

/** Set date to given long count date */
public void set (int baktuns, int katuns, int tuns, int uinals, int kins) {
     assert MayaTimeUnit.Kin.toDays (1) == 1;
     daysSinceGreatCycle =
          MayaTimeUnit.Baktun.toDays (baktuns) +
          MayaTimeUnit.Katun.toDays(katuns) +
          MayaTimeUnit.Tun.toDays(tuns) +
          MayaTimeUnit.Winal.toDays(uinals) +
          kins;
}

[...]

/** @return day name number in Tzolk'in calendar, e.g. it returns 0 (Ajaw) for the day "4 Ajaw" */
public Tzolkin toTzolkinDayName () {
     // The Tzolk'in date is counted forward from 4 Ajaw.
     return Tzolkin.DAYS[(daysSinceGreatCycle + 19) % 20]; // relative to Ajaw
}

/** @return day number in Tzolk'in calendar, e.g. it returns 4 for the day "4 Ajaw" */
public int toTzolkinDayNumber () {
     // The Tzolk'in date is counted forward from 4 Ajaw.
     return (daysSinceGreatCycle + 4) % 13;
}
[...]  

/** @return day name number in Haab calendar, e.g. it returns Yaxkin (5) for the day "14 Yaxk'in" */
public Haab toHaabDayName () {
     int d = (daysSinceGreatCycle + 349) % 365;
     return Haab.DAYS[d / 20];
}

/** @return day number in Haab calendar, e.g. it returns 14 for the day "14 Yaxk'in" */
public int toHaabDayNumber () {
     int d = (daysSinceGreatCycle + 349) % 365;
     return d % 20 - 1;
}
[...]  

/** @return Gregorian calendar representation of currently set date  */
public String toGregorianString () {
     Calendar c = toGregorianDate ();
     return format.format(c.getTime());
}

/** @return Converts currently defined date into Gregorian calendar */
public Calendar toGregorianDate () {
     Calendar c = (Calendar)greatCycleStartDate.clone();
     c.add(Calendar.DAY_OF_YEAR, daysSinceGreatCycle);
     return c;
}
[...]

В любом случае: классный вопрос: -)

1 голос
/ 29 марта 2010

Лучший способ использования других календарей / хронологий в Java - превосходная библиотека Joda-Time . У него нет самой хронологии майя, но вы можете исправить собственную реализацию правил майя и подключить ее. Не должно быть слишком обременительным.

1 голос
/ 29 марта 2010

Использование JodaTime . Упс, простите, просто рефлекс при чтении вопроса о java.util.Calendar; -)

В сети есть Java-апплеты , которые могут быть вам полезны.

0 голосов
/ 29 марта 2010

LOL, Попробуйте установить последнюю выбираемую дату на 21 декабря 2012 года? но на самом деле это не конец, просто начинается все заново, поэтому вы хотите снова начать считать после 21 декабря 2012 года?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...