2010-03-29 22 views

Respuesta

0

LOL, intente configurar la fecha de la última selección hasta el 21 de diciembre de 2012? pero realmente no termina ahí, solo comienza de nuevo, ¿quiere comenzar a contar nuevamente después del 21 de diciembre de 2012?

1

La mejor manera de utilizar otros calendarios/cronologías en Java es la excelente biblioteca Joda-Time. No tiene una cronología maya en sí misma, pero podría corregir su propia implementación de las reglas mayas y conectarla. No debería ser demasiado oneroso.

+2

No estoy seguro de si es tan fácil, incluso Jon Skeet señaló: http://msmvps.com/blogs/jon_skeet/archive/2009/11/06/noda-time-is-born.aspx#1738663 – Thilo

+0

Está escribiendo una escalera puerto, y quiere centrarse en eso en lugar de características adicionales, como nuevas cronologías. Creo que es justo, sin indicar lo difícil que sería escribir una nueva cronología. – GaryF

1

Use JodaTime. Vaya, lo siento, solo un reflejo al leer una pregunta sobre java.util.Calendar ;-)

Hay algunos Java applets en la web que pueden ser útiles para usted.

6

¿Se le acabó su calendario ahora? :-)

+3

+1 Por diversión –

1

Si realmente está buscando una solución, esta Maya Calendar implementation parece bastante buena.

Implementa un maya Tzolk'in calender utilizando Java GregorianCalendar. Las fechas se pueden recuperar en formato Gregorian o Tzolk'in.

Estas son las partes fundamentales:

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

en todo caso: pregunta fresca :-)

Cuestiones relacionadas