2010-03-29 16 views
21

Maya takvimini Java'da nasıl kullanabilirim?Java'da Maya takvimi

+12

Y2012 sorun hakkında böyle mi :-) Serin soru İşte

çekirdek parçalarıdır? – Thilo

+0

LOL bu iyi bir –

+3

Dürüst olmak gerekirse en iyi soru. – ponzao

cevap

0

LOL, Son seçilebilir tarihi 21 Aralık 2012'ye ayarlamayı deneyin. ama orada gerçekten bitmiyor, sadece başlıyor, yani 21 Aralık 2012'den sonra tekrar saymaya başlamak istiyor musunuz?

1

Java'daki diğer takvimleri/chronologies'leri kullanmanın en iyi yolu mükemmel Joda-Time kütüphanesidir. Onun bir Maya kronolojisi yoktur, ancak Maya kurallarını kendi uygulamanızda haklı çıkarırsınız ve onu takabilirsiniz. Çok fazla zahmetli olmamalıdır.

+2

Jon Skeet'in bile bu kadar kolay olup olmadığından emin değil: http://msmvps.com/blogs/jon_skeet/archive/2009/11/06/noda-time-is-born.aspx#1738663 – Thilo

+0

Düz yazıyor portu ve yeni kronolojiler gibi ek özellikler yerine bunlara odaklanmak ister. Yeni bir kronoloji yazmanın ne kadar zor olduğunu göstermeden bu yeterince adil olduğunu düşünüyorum. – GaryF

1

JodaTime'u kullanın. Oops, üzgünüm, sadece bir refleks java.util.Calendar ;-)

hakkında bir soru okurken web üzerinde size yardımcı olabilecek bazı Java applets vardır.

6

Takviminiz şimdi bitti mi? :-)

+3

+1 Eğlence için –

1

Gerçekten bir çözüm arıyorsanız, bu Maya Calendar implementation oldukça iyi görünüyor. Java'nın GregorianCalendar kullanarak bir maya Tzolk'in calender uygular. Tarihler hem Gregorian'da hem de Tzolk'in formatında alınabilir. Her durumda

[...] 
/** 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; 
} 
[...] 

:

İlgili konular