2010-03-29 14 views
21

Tôi có thể sử dụng lịch Maya bằng Java như thế nào?Lịch của người Maya ở Java

+12

Đây có phải là về vấn đề Y2012? – Thilo

+0

LOL là một câu hỏi hay nhất –

+3

Thành thật mà nói là câu hỏi hay nhất từ ​​trước tới nay. – ponzao

Trả lời

0

LOL, thử đặt ngày có thể chọn cuối cùng thành ngày 21 tháng 12 năm 2012? nhưng không thực sự kết thúc ở đó, nó chỉ bắt đầu lại để bạn muốn bắt đầu đếm lại sau ngày 21 tháng 12 năm 2012?

1

Cách tốt nhất để sử dụng các lịch/niên đại khác trong Java là thư viện xuất sắc Joda-Time. Nó không có niên đại của người Maya, nhưng bạn có thể tự mình thực hiện các quy tắc của người Maya và cắm nó vào. Không nên quá nguy hiểm.

+2

Bạn không chắc liệu nó có dễ đến mức không, ngay cả Jon Skeet cũng đã punted: http://msmvps.com/blogs/jon_skeet/archive/2009/11/06/noda-time-is-born.aspx#1738663 – Thilo

+0

Anh ấy viết thẳng cổng và muốn tập trung vào điều đó thay vì các tính năng bổ sung như thời gian mới. Tôi nghĩ đó là đủ công bằng, mà không cho biết sẽ khó khăn như thế nào để viết một niên đại mới. – GaryF

1

Sử dụng JodaTime. Rất tiếc, xin lỗi, chỉ là phản xạ khi đọc câu hỏi về java.util.Calendar ;-)

Có một số trang web có thể hữu ích đối với bạn trên trang web có số Java applets.

6

Lịch của bạn có hết giờ không? :-)

+3

+1 Để giải trí –

1

Nếu bạn đang thực sự tìm kiếm giải pháp, Maya Calendar implementation này có vẻ khá tốt.

Nó thực hiện một maya Tzolk'in calender sử dụng Java GregorianCalendar. Ngày có thể được lấy cả hai trong định dạng Gregorian hoặc Tzolk'in.

Dưới đây là những phần cốt lõi:

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

Trong mọi trường hợp: Cool câu hỏi :-)

Các vấn đề liên quan