PKU1008 calendar conversion


ネットで見てみると、カレンダー変換の特別なアルゴリズムはなく、emacsの実現を見ることをお勧めします.
まあ、まずこのような普通の実現でいいですが、mapping month name以外に最適化できるものは見つかりません.

/**
 * element 20090324
 */
public class CalendarConversion {

	public static final String[] haabMonthsName = { "pop", "no", "zip", "zotz",
			"tzec", "xul", "yoxkin", "mol", "chen", "yax", "zac", "ceh", "mac",
			"kankin", "muan", "pax", "koyab", "cumhu" };

	public static final String[] TzolkinDaysName = { "imix", "ik", "akbal",
			"kan", "chicchan", "cimi", "manik", "lamat", "muluk", "ok",
			"chuen", "eb", "ben", "ix", "mem", "cib", "caban", "eznab",
			"canac", "ahau" };

	public int getMonth(String month) {
		for (int i = 0; i < haabMonthsName.length; i++) {
			if (haabMonthsName[i].equals(month)) {
				if (i == haabMonthsName.length - 1)
					return i * 20 - 15;
				else
					return i * 20;
			}
		}
		return 0;
	}

	public int getdays(String[] dayMonthYear) {
		int year = Integer.parseInt(dayMonthYear[2]);
		int month = this.getMonth(dayMonthYear[1]);
		int day = Integer.parseInt(dayMonthYear[0].substring(0, dayMonthYear[0]
				.length() - 1)) + 1;
		return year * 365 + month + day;
	}

	public String Conversion(String haab) {
		int conuntDay = this.getdays(haab.split(" "));
		String Tzolkin = String.valueOf((conuntDay % 260) % 13) + " "
				+ TzolkinDaysName[(conuntDay % 260) % 20 - 1] + " " + conuntDay / 260;
		return Tzolkin;
	}

	public static void main(String[] args) {
		String haab = "10. zac 1995";
		System.out.println(new CalendarConversion().Conversion(haab));
		//9 cimi 2801
	}

}