diff --git a/TMessagesProj/src/main/java/org/telegram/messenger/LocaleController.java b/TMessagesProj/src/main/java/org/telegram/messenger/LocaleController.java index 9e3ec4df5..da95c6f7a 100644 --- a/TMessagesProj/src/main/java/org/telegram/messenger/LocaleController.java +++ b/TMessagesProj/src/main/java/org/telegram/messenger/LocaleController.java @@ -50,7 +50,7 @@ import java.util.TimeZone; import tw.nekomimi.nekogram.NekoConfig; import tw.nekomimi.nekogram.parts.LocFiltersKt; -import tw.nekomimi.nekogram.shamsicalendar.PersianCalendar; +import tw.nekomimi.nekogram.shamsicalendar.PersianDate; import tw.nekomimi.nekogram.utils.FileUtil; import tw.nekomimi.nekogram.utils.GsonUtil; @@ -1597,19 +1597,18 @@ public class LocaleController { date *= 1000; calendar.setTimeInMillis(date); - PersianCalendar persianCalendar = null; - if (usePersianCalendar) { - persianCalendar = new PersianCalendar(date); - } + PersianDate persianDate = null; + if (usePersianCalendar) + persianDate = new PersianDate(date); if (checkYear && currentYear == calendar.get(Calendar.YEAR) || !checkYear && Math.abs(System.currentTimeMillis() - date) < 31536000000L) { if (usePersianCalendar) { - return persianCalendar.getPersianMonthDay(); + return persianDate.getPersianMonthDay(); } else { return getInstance().chatDate.format(date); } } else { if (usePersianCalendar) { - return persianCalendar.getPersianNormalDate(); + return persianDate.getPersianNormalDate(); } else { return getInstance().chatFullDate.format(date); } @@ -1683,10 +1682,9 @@ public class LocaleController { rightNow.setTimeInMillis(date); int dateDay = rightNow.get(Calendar.DAY_OF_YEAR); int dateYear = rightNow.get(Calendar.YEAR); - PersianCalendar persianCalendar = null; - if (usePersianCalendar) { - persianCalendar = new PersianCalendar(date); - } + PersianDate persianDate = null; + if (usePersianCalendar) + persianDate = new PersianDate(date); if (dateDay == day && year == dateYear) { return getInstance().formatterDay.format(new Date(date)); @@ -1694,13 +1692,13 @@ public class LocaleController { return LocaleController.formatString("YesterdayAtFormatted", R.string.YesterdayAtFormatted, getInstance().formatterDay.format(new Date(date))); } else if (Math.abs(System.currentTimeMillis() - date) < 31536000000L) { if (usePersianCalendar) { - return LocaleController.formatString("formatDateAtTime", R.string.formatDateAtTime, persianCalendar.getPersianMonthDay(), getInstance().formatterDay.format(new Date(date))); + return LocaleController.formatString("formatDateAtTime", R.string.formatDateAtTime, persianDate.getPersianMonthDay(), getInstance().formatterDay.format(new Date(date))); } else { return LocaleController.formatString("formatDateAtTime", R.string.formatDateAtTime, getInstance().chatDate.format(new Date(date)), getInstance().formatterDay.format(new Date(date))); } } else { if (usePersianCalendar) { - return LocaleController.formatString("formatDateAtTime", R.string.formatDateAtTime, persianCalendar.getPersianNormalDate(), getInstance().formatterDay.format(new Date(date))); + return LocaleController.formatString("formatDateAtTime", R.string.formatDateAtTime, persianDate.getPersianNormalDate(), getInstance().formatterDay.format(new Date(date))); } else { return LocaleController.formatString("formatDateAtTime", R.string.formatDateAtTime, getInstance().chatFullDate.format(new Date(date)), getInstance().formatterDay.format(new Date(date))); } @@ -1794,9 +1792,9 @@ public class LocaleController { rightNow.setTimeInMillis(date); int dateDay = rightNow.get(Calendar.DAY_OF_YEAR); int dateYear = rightNow.get(Calendar.YEAR); - PersianCalendar persianCalendar = null; + PersianDate persianDate = null; if (usePersianCalendar) { - persianCalendar = new PersianCalendar(date); + persianDate = new PersianDate(date); } if (dateDay == day && year == dateYear) { @@ -1813,7 +1811,7 @@ public class LocaleController { return LocaleController.formatString("LastSeenFormatted", R.string.LastSeenFormatted, LocaleController.formatString("YesterdayAtFormatted", R.string.YesterdayAtFormatted, getInstance().formatterDay.format(new Date(date)))); } else if (Math.abs(System.currentTimeMillis() - date) < 31536000000L) { if (usePersianCalendar) { - String format = LocaleController.formatString("formatDateAtTime", R.string.formatDateAtTime, persianCalendar.getPersianMonthDay(), getInstance().formatterDay.format(new Date(date))); + String format = LocaleController.formatString("formatDateAtTime", R.string.formatDateAtTime, persianDate.getPersianMonthDay(), getInstance().formatterDay.format(new Date(date))); return LocaleController.formatString("LastSeenDateFormatted", R.string.LastSeenDateFormatted, format); } else { String format = LocaleController.formatString("formatDateAtTime", R.string.formatDateAtTime, getInstance().formatterDayMonth.format(new Date(date)), getInstance().formatterDay.format(new Date(date))); @@ -1821,7 +1819,7 @@ public class LocaleController { } } else { if (usePersianCalendar) { - String format = LocaleController.formatString("formatDateAtTime", R.string.formatDateAtTime, persianCalendar.getPersianNormalDate(), getInstance().formatterDay.format(new Date(date))); + String format = LocaleController.formatString("formatDateAtTime", R.string.formatDateAtTime, persianDate.getPersianNormalDate(), getInstance().formatterDay.format(new Date(date))); return LocaleController.formatString("LastSeenDateFormatted", R.string.LastSeenDateFormatted, format); } else { String format = LocaleController.formatString("formatDateAtTime", R.string.formatDateAtTime, getInstance().formatterYear.format(new Date(date)), getInstance().formatterDay.format(new Date(date))); @@ -2008,7 +2006,7 @@ public class LocaleController { } else if (dayDiff > -7 && dayDiff <= -1) { return getInstance().formatterWeek.format(new Date(date)); } else if (usePersianCalendar) { - return new PersianCalendar(date).getPersianMonthDay(); + return new PersianDate(date).getPersianMonthDay(); } else { return getInstance().formatterDayMonth.format(new Date(date)); } diff --git a/TMessagesProj/src/main/java/tw/nekomimi/nekogram/shamsicalendar/LanguageUtils.java b/TMessagesProj/src/main/java/tw/nekomimi/nekogram/shamsicalendar/LanguageUtils.java index 906937ed2..831a676d4 100644 --- a/TMessagesProj/src/main/java/tw/nekomimi/nekogram/shamsicalendar/LanguageUtils.java +++ b/TMessagesProj/src/main/java/tw/nekomimi/nekogram/shamsicalendar/LanguageUtils.java @@ -4,7 +4,7 @@ import java.util.ArrayList; public class LanguageUtils { public static String getPersianNumbers(String string) { - return string.replace("0", "۰").replace("1", "١").replace("2", "۲").replace("3", "۳").replace("4", "۴").replace("5", "۵").replace("6", "۶").replace("7", "۷").replace("8", "۸").replace("9", "۹"); + return string.replace("0", "۰").replace("1", "١").replace("2", "۲").replace("3", "۳").replace("4", "۴").replace("5", "۵").replace("6", "۶").replace("7", "۷").replace("8", "۸").replace("9", "۹").replace(":", ":"); } public static String[] getPersianNumbers(String[] strings) { diff --git a/TMessagesProj/src/main/java/tw/nekomimi/nekogram/shamsicalendar/PersianCalendar.java b/TMessagesProj/src/main/java/tw/nekomimi/nekogram/shamsicalendar/PersianCalendar.java deleted file mode 100644 index 9c8319ed7..000000000 --- a/TMessagesProj/src/main/java/tw/nekomimi/nekogram/shamsicalendar/PersianCalendar.java +++ /dev/null @@ -1,193 +0,0 @@ -package tw.nekomimi.nekogram.shamsicalendar; - -import java.util.GregorianCalendar; -import java.util.TimeZone; - -import tw.nekomimi.nekogram.NekoConfig; - -public class PersianCalendar extends GregorianCalendar { - private static final long serialVersionUID = 5541422440580682494L; - private String delimiter = "/"; - private int persianDay; - private int persianMonth; - private int persianYear; - - private long convertToMilis(long julianDate) { - return ((86400000 * julianDate) - 210866803200000L) + PersianCalendarUtils.ceil((double) (getTimeInMillis() - -210866803200000L), 8.64E7d); - } - - public PersianCalendar(long millis) { - setTimeInMillis(millis); - } - - public PersianCalendar() { - setTimeZone(TimeZone.getTimeZone("GMT")); - } - - protected void calculatePersianDate() { - long PersianRowDate = PersianCalendarUtils.julianToPersian(((long) Math.floor((double) (getTimeInMillis() - -210866803200000L))) / 86400000); - long year = PersianRowDate >> 16; - int month = ((int) (65280 & PersianRowDate)) >> 8; - int day = (int) (255 & PersianRowDate); - if (year <= 0) { - year--; - } - this.persianYear = (int) year; - this.persianMonth = month; - this.persianDay = day; - } - - public boolean isPersianLeapYear() { - return PersianCalendarUtils.isPersianLeapYear(this.persianYear); - } - - public void setPersianDate(int persianYear, int persianMonth, int persianDay) { - persianMonth++; - this.persianYear = persianYear; - this.persianMonth = persianMonth; - this.persianDay = persianDay; - setTimeInMillis(convertToMilis(PersianCalendarUtils.persianToJulian(this.persianYear > 0 ? (long) this.persianYear : (long) (this.persianYear + 1), this.persianMonth - 1, this.persianDay))); - } - - public int getPersianYear() { - return this.persianYear; - } - - public String getPersianYearName() { - if (NekoConfig.displayPersianCalendarByLatin.Bool()) { - return getPersianYear() + ""; - } else { - return LanguageUtils.getPersianNumbers(String.valueOf(this.persianYear)); - } - } - - public int getPersianMonth() { - return this.persianMonth; - } - - public String getPersianMonthName() { - if (NekoConfig.displayPersianCalendarByLatin.Bool()) { - return PersianCalendarConstants.persianMonthNamesLatin[this.persianMonth]; - } else { - return PersianCalendarConstants.persianMonthNames[this.persianMonth]; - } - } - - public int getPersianDay() { - return this.persianDay; - } - - public String getPersianDayName() { - if (NekoConfig.displayPersianCalendarByLatin.Bool()) { - return getPersianDay() + ""; - } else { - return LanguageUtils.getPersianNumbers(String.valueOf(this.persianDay)); - } - } - - - public String getPersianWeekDayName() { - switch (get(7)) { - case 1: - return PersianCalendarConstants.persianWeekDays[1]; - case 2: - return PersianCalendarConstants.persianWeekDays[2]; - case 3: - return PersianCalendarConstants.persianWeekDays[3]; - case 4: - return PersianCalendarConstants.persianWeekDays[4]; - case 5: - return PersianCalendarConstants.persianWeekDays[5]; - case 7: - return PersianCalendarConstants.persianWeekDays[0]; - default: - return PersianCalendarConstants.persianWeekDays[6]; - } - } - - public String getPersianLongDate() { - return getPersianWeekDayName() + " " + getPersianDayName() + " " + getPersianMonthName() + " " + this.persianYear; - } - - - public String getPersianNormalDate() { - return getPersianDayName() + " " + getPersianMonthName() + " " + getPersianYearName(); - } - - //like 9 شهریور - public String getPersianMonthDay() { - return getPersianDayName() + " " + getPersianMonthName(); - } - - public String getPersianLongDateAndTime() { - return getPersianLongDate() + " ساعت " + get(11) + ":" + get(12) + ":" + get(13); - } - - public String getPersianShortDate() { - return "" + formatToMilitary(this.persianYear) + this.delimiter + formatToMilitary(getPersianMonth() + 1) + this.delimiter + formatToMilitary(this.persianDay); - } - - public String getPersianShortDateTime() { - return "" + formatToMilitary(this.persianYear) + this.delimiter + formatToMilitary(getPersianMonth() + 1) + this.delimiter + formatToMilitary(this.persianDay) + " " + formatToMilitary(get(11)) + ":" + formatToMilitary(get(12)) + ":" + formatToMilitary(get(13)); - } - - private String formatToMilitary(int i) { - return i < 9 ? "0" + i : String.valueOf(i); - } - - public void addPersianDate(int field, int amount) { - if (amount != 0) { - if (field < 0 || field >= 15) { - throw new IllegalArgumentException(); - } else if (field == 1) { - setPersianDate(this.persianYear + amount, getPersianMonth() + 1, this.persianDay); - } else if (field == 2) { - setPersianDate(this.persianYear + (((getPersianMonth() + 1) + amount) / 12), ((getPersianMonth() + 1) + amount) % 12, this.persianDay); - } else { - add(field, amount); - calculatePersianDate(); - } - } - } - - public void parse(String dateString) { - PersianCalendar p = new PersianDateParser(dateString, this.delimiter).getPersianDate(); - setPersianDate(p.getPersianYear(), p.getPersianMonth(), p.getPersianDay()); - } - - public String getDelimiter() { - return this.delimiter; - } - - public void setDelimiter(String delimiter) { - this.delimiter = delimiter; - } - - public String toString() { - String str = super.toString(); - return str.substring(0, str.length() - 1) + ",PersianDate=" + getPersianShortDate() + "]"; - } - - public boolean equals(Object obj) { - return super.equals(obj); - } - - public int hashCode() { - return super.hashCode(); - } - - public void set(int field, int value) { - super.set(field, value); - calculatePersianDate(); - } - - public void setTimeInMillis(long millis) { - super.setTimeInMillis(millis); - calculatePersianDate(); - } - - public void setTimeZone(TimeZone zone) { - super.setTimeZone(zone); - calculatePersianDate(); - } -} \ No newline at end of file diff --git a/TMessagesProj/src/main/java/tw/nekomimi/nekogram/shamsicalendar/PersianCalendarConstants.java b/TMessagesProj/src/main/java/tw/nekomimi/nekogram/shamsicalendar/PersianCalendarConstants.java deleted file mode 100644 index 0db02092a..000000000 --- a/TMessagesProj/src/main/java/tw/nekomimi/nekogram/shamsicalendar/PersianCalendarConstants.java +++ /dev/null @@ -1,10 +0,0 @@ -package tw.nekomimi.nekogram.shamsicalendar; - -public class PersianCalendarConstants { - public static final long MILLIS_JULIAN_EPOCH = -210866803200000L; - public static final long MILLIS_OF_A_DAY = 86400000; - public static final long PERSIAN_EPOCH = 1948321; - public static final String[] persianMonthNames = new String[]{"فروردین", "اردیبهشت", "خرداد", "تیر", "مرداد", "شهریور", "مهر", "آبان", "آذر", "دی", "بهمن", "اسفند"}; - public static final String[] persianMonthNamesLatin = new String[]{"Farvardin", "Ordibehesht", "Khordad", "Tir", "Mordad", "Shahrivar", "Mehr", "Aban", "Azar", "Dey", "Bahman", "Esfand"}; - public static final String[] persianWeekDays = new String[]{"شنبه", "یک‌شنبه", "دوشنبه", "سه‌شنبه", "چهارشنبه", "پنج‌شنبه", "جمعه"}; -} \ No newline at end of file diff --git a/TMessagesProj/src/main/java/tw/nekomimi/nekogram/shamsicalendar/PersianCalendarUtils.java b/TMessagesProj/src/main/java/tw/nekomimi/nekogram/shamsicalendar/PersianCalendarUtils.java deleted file mode 100644 index 17617ab8d..000000000 --- a/TMessagesProj/src/main/java/tw/nekomimi/nekogram/shamsicalendar/PersianCalendarUtils.java +++ /dev/null @@ -1,24 +0,0 @@ -package tw.nekomimi.nekogram.shamsicalendar; - -public class PersianCalendarUtils { - public static long persianToJulian(long year, int month, int day) { - return (((long) (month < 7 ? month * 31 : (month * 30) + 6)) + ((1029983 * ((long) Math.floor(((double) (year - 474)) / 2820.0d))) + (((365 * ((ceil((double) (year - 474), 2820.0d) + 474) - 1)) + ((long) Math.floor(((double) ((682 * (ceil((double) (year - 474), 2820.0d) + 474)) - 110)) / 2816.0d))) + 1948320))) + ((long) day); - } - - public static boolean isPersianLeapYear(int persianYear) { - return ceil((38.0d + ((double) (ceil((double) (((long) persianYear) - 474), 2820.0d) + 474))) * 682.0d, 2816.0d) < 682; - } - - public static long julianToPersian(long julianDate) { - long persianEpochInJulian = julianDate - persianToJulian(475, 0, 1); - long cyear = ceil((double) persianEpochInJulian, 1029983.0d); - long year = (474 + (2820 * ((long) Math.floor(((double) persianEpochInJulian) / 1029983.0d)))) + (cyear != 1029982 ? (long) Math.floor(((2816.0d * ((double) cyear)) + 1031337.0d) / 1028522.0d) : 2820); - long aux = (1 + julianDate) - persianToJulian(year, 0, 1); - int month = (int) (aux > 186 ? Math.ceil(((double) (aux - 6)) / 30.0d) - 1.0d : Math.ceil(((double) aux) / 31.0d) - 1.0d); - return ((year << 16) | ((long) (month << 8))) | ((long) ((int) (julianDate - (persianToJulian(year, month, 1) - 1)))); - } - - public static long ceil(double double1, double double2) { - return (long) (double1 - (Math.floor(double1 / double2) * double2)); - } -} \ No newline at end of file diff --git a/TMessagesProj/src/main/java/tw/nekomimi/nekogram/shamsicalendar/PersianDate.java b/TMessagesProj/src/main/java/tw/nekomimi/nekogram/shamsicalendar/PersianDate.java new file mode 100644 index 000000000..4ace2983a --- /dev/null +++ b/TMessagesProj/src/main/java/tw/nekomimi/nekogram/shamsicalendar/PersianDate.java @@ -0,0 +1,1051 @@ +package tw.nekomimi.nekogram.shamsicalendar; + +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.util.Arrays; +import java.util.Calendar; +import java.util.Date; +import tw.nekomimi.nekogram.NekoConfig; + +public class PersianDate { + + /*----- Define Variable ---*/ + private Long timeInMilliSecond; + public static final int FARVARDIN = 1; + public static final int ORDIBEHEST = 2; + public static final int KHORDAD = 3; + public static final int TIR = 4; + public static final int MORDAD = 5; + public static final int SHAHRIVAR = 6; + public static final int MEHR = 7; + public static final int ABAN = 8; + public static final int AZAR = 9; + public static final int DAY = 10; + public static final int BAHMAN = 11; + public static final int ESFAND = 12; + public static final int AM = 1; + public static final int PM = 2; + public static final String AM_SHORT_NAME = "ق.ظ"; + public static final String PM_SHORT_NAME = "ب.ظ"; + public static final String AM_NAME = "قبل از ظهر"; + public static final String PM_NAME = "بعد از ظهر"; + private int shYear; + private int shMonth; + private int shDay; + private int grgYear; + private int grgMonth; + private int grgDay; + private int hour; + private int minute; + private int second; + + enum Dialect { + AFGHAN, + IRANIAN, + KURDISH, + PASHTO, + LATIN + } + + /** + * Contractor + */ + public PersianDate() { + this.timeInMilliSecond = new Date().getTime(); + this.changeTime(); + } + /** + * Contractor + */ + public PersianDate(Long timeInMilliSecond) { + this.timeInMilliSecond = timeInMilliSecond; + this.changeTime(); + } + + /** + * Contractor + */ + public PersianDate(Date date) { + this.timeInMilliSecond = date.getTime(); + this.changeTime(); + } + + /** + * ---- Don not change--- + */ + private final int[][] grgSumOfDays = { + {0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334, 365}, + {0, 31, 60, 91, 121, 152, 182, 213, 244, 274, 305, 335, 366}}; + private final int[][] hshSumOfDays = { + {0, 31, 62, 93, 124, 155, 186, 216, 246, 276, 306, 336, 365}, + {0, 31, 62, 93, 124, 155, 186, 216, 246, 276, 306, 336, 366}}; + private final String[] dayNames = {"شنبه", "یک‌شنبه", "دوشنبه", "سه‌شنبه", "چهارشنبه", "پنج‌شنبه", + "جمعه"}; + private final String[] monthNames = {"فروردین", "اردیبهشت", "خرداد", "تیر", "مرداد", "شهریور", + "مهر", "آبان", "آذر", "دی", "بهمن", "اسفند"}; + private final String[] monthNamesLatin = {"Farvardin", "Ordibehesht", "Khordad", "Tir", "Mordad", "Shahrivar", + "Mehr", "Aban", "Azar", "Dey", "Bahman", "Esfand"}; + private final String[] AfghanMonthNames = {"حمل", "ثور", "جوزا", "سرطان", "اسد", "سنبله", "میزان", + "عقرب", "قوس", "جدی", "دلو", "حوت"}; + private final String[] KurdishMonthNames = {"جیژنان", "گولان", "زه ردان", "په رپه ر", "گه لاویژ", + "نوخشان", "به ران", "خه زان", "ساران", "بفران", "به ندان", "رمشان"}; + private final String[] PashtoMonthNames = {"وری", "غويی", "غبرګولی", "چنګاښ", "زمری", "وږی", + "تله", "لړم", "ليندۍ", "مرغومی", "سلواغه", "كب"}; + private String delimiter = "/"; + + /*---- Setter And getter ----*/ + public int getShYear() { + return shYear; + } + + public PersianDate setShYear(int shYear) { + this.shYear = shYear; + this.prepareDate2(this.getShYear(), this.getShMonth(), this.getShDay()); + return this; + } + + public int getShMonth() { + return shMonth; + } + + public PersianDate setShMonth(int shMonth) { + this.shMonth = shMonth; + this.prepareDate2(this.getShYear(), this.getShMonth(), this.getShDay()); + return this; + } + + public int getShDay() { + return shDay; + } + + public PersianDate setShDay(int shDay) { + this.shDay = shDay; + this.prepareDate2(this.getShYear(), this.getShMonth(), this.getShDay()); + return this; + } + + public int getGrgYear() { + return grgYear; + } + + public PersianDate setGrgYear(int grgYear) { + this.grgYear = grgYear; + prepareDate(); + return this; + } + + public int getGrgMonth() { + return grgMonth; + } + + public PersianDate setGrgMonth(int grgMonth) { + this.grgMonth = grgMonth; + prepareDate(); + return this; + } + + public int getGrgDay() { + return grgDay; + } + + public PersianDate setGrgDay(int grgDay) { + this.grgDay = grgDay; + prepareDate(); + return this; + } + + public int getHour() { + return hour; + } + + public PersianDate setHour(int hour) { + this.hour = hour; + prepareDate(); + return this; + } + + public int getMinute() { + return minute; + } + + public PersianDate setMinute(int minute) { + this.minute = minute; + prepareDate(); + return this; + } + + public int getSecond() { + return second; + } + + public PersianDate setSecond(int second) { + this.second = second; + prepareDate(); + return this; + } + + public String getDelimiter() { + return this.delimiter; +} + + public void setDelimiter(String delimiter) { + this.delimiter = delimiter; + } + + private String formatToMilitary(int i) { + return i < 9 ? "0" + i : String.valueOf(i); + } + + public String getPersianShortDate() { + if (NekoConfig.displayPersianCalendarByLatin.Bool()) { + return "" + formatToMilitary(this.getShYear()) + this.delimiter + formatToMilitary(getShMonth() + 1) + this.delimiter + formatToMilitary(this.getShDay()); + } else { + return LanguageUtils.getPersianNumbers("" + formatToMilitary(this.getShYear()) + this.delimiter + formatToMilitary(this.getShMonth() + 1) + this.delimiter + formatToMilitary(this.getShDay())); + } + } + + public String getPersianNormalDate() { + if (NekoConfig.displayPersianCalendarByLatin.Bool()) { + return this.getShDay() + " " + this.monthNamesLatin() + " " + this.getShYear(); + } else { + return LanguageUtils.getPersianNumbers(String.valueOf(this.getShDay())) + " " + this.monthName() + " " + LanguageUtils.getPersianNumbers(String.valueOf(this.getShYear())); + } + } + + //like 9 شهریور + public String getPersianMonthDay() { + if (NekoConfig.displayPersianCalendarByLatin.Bool()) { + return this.getShDay() + " " + this.monthNamesLatin(); + } else { + return LanguageUtils.getPersianNumbers(String.valueOf(this.getShDay())) + " " + this.monthName(); + } + } + /** + * init without time + * + * @param year Year in Grg + * @param month Month in Grg + * @param day Day in Grg + * @return persianDate + */ + public PersianDate initGrgDate(int year, int month, int day) { + return this.initGrgDate(year, month, day, 0, 0, 0); + } + + /** + * init with Grg data + * + * @param year Year in Grg + * @param month Month in Grg + * @param day day in Grg + * @param hour hour + * @param minute min + * @param second second + * @return PersianDate + */ + public PersianDate initGrgDate(int year, int month, int day, int hour, int minute, int second) { + this.grgYear = year; + this.grgMonth = month; + this.grgDay = day; + this.hour = hour; + this.minute = minute; + this.second = second; + this.setGrgYear(year) + .setGrgMonth(month) + .setGrgDay(day) + .setHour(hour) + .setMinute(minute) + .setSecond(second); + int[] convert = this.toJalali(year, month, day); + this.shYear = convert[0]; + this.shMonth = convert[1]; + this.shDay = convert[2]; + this.setShYear(convert[0]) + .setShMonth(convert[1]) + .setShDay(convert[2]); + return this; + } + + /** + * initialize date from Jallali date + * + * @param year Year in Jallali date + * @param month Month in Jallali date + * @param day day in Jallali date + * @return PersianDate + */ + public PersianDate initJalaliDate(int year, int month, int day) { + return this.initJalaliDate(year, month, day, 0, 0, 0); + } + + /** + * initialize date from Jallali date + * + * @param year Year in jallali date + * @param month Month in Jallali date + * @param day day in Jallali date + * @param hour Hour + * @param minute Minute + * @param second Second + * @return PersianDate + */ + public PersianDate initJalaliDate(int year, int month, int day, int hour, int minute, + int second) { + this.setShYear(year) + .setShMonth(month) + .setShDay(day) + .setHour(hour) + .setMinute(minute) + .setSecond(second); + int[] convert = this.toGregorian(year, month, day); + this.setGrgYear(convert[0]) + .setGrgMonth(convert[1]) + .setGrgDay(convert[2]); + return this; + } + + /** + * Helper function for initialize jalali date + * + * @param year Year + * @param month Month + * @param day Day + * @return PersianDate + */ + private PersianDate prepareDate2(int year, int month, int day) { + int[] convert = this.toGregorian(year, month, day); + this.grgYear = convert[0]; + this.grgMonth = convert[1]; + this.setGrgDay(convert[2]); + return this; + } + + /** + * Helper function for initialize + */ + private void prepareDate() { + String dtStart = "" + this.textNumberFilter("" + this.getGrgYear()) + "-" + this + .textNumberFilter("" + this.getGrgMonth()) + "-" + this + .textNumberFilter("" + this.getGrgDay()) + + "T" + this.textNumberFilter("" + this.getHour()) + ":" + this + .textNumberFilter("" + this.getMinute()) + ":" + this + .textNumberFilter("" + this.getSecond()) + "Z"; + SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'"); + int[] convert = this.toJalali(this.getGrgYear(), this.getGrgMonth(), this.getGrgDay()); + this.shYear = convert[0]; + this.shMonth = convert[1]; + this.shDay = convert[2]; + Date date = null; + try { + date = format.parse(dtStart); + this.timeInMilliSecond = date.getTime(); + } catch (ParseException e) { + e.printStackTrace(); + } + } + + /** + * return time in long value + * + * @return Value of time in mile + */ + public Long getTime() { + return this.timeInMilliSecond; + } + + /** + * Check Grg year is leap + * + * @param Year Year + * @return boolean + */ + public boolean grgIsLeap(int Year) { + return ((Year % 4) == 0 && ((Year % 100) != 0 || (Year % 400) == 0)); + } + + /** + * Check year in Leap + * + * @return true or false + */ + public boolean isLeap() { + return this.isLeap(this.shYear); + } + + /** + * Check custom year is leap + * + * @param year int year + * @return true or false + */ + public boolean isLeap(int year) { + double referenceYear = 1375; + double startYear = 1375; + double yearRes = year - referenceYear; + if (yearRes > 0) { + if (yearRes >= 33) { + double numb = yearRes / 33; + startYear = referenceYear + Math.floor(numb) * 33; + } + } else { + if (yearRes >= -33) { + startYear = referenceYear - 33; + } else { + double numb = Math.abs(yearRes / 33); + startYear = referenceYear - (Math.floor(numb) + 1) * 33; + } + } + double[] leapYears = {startYear, startYear + 4, startYear + 8, startYear + 16, startYear + 20, + startYear + 24, startYear + 28, startYear + 33}; + return (Arrays.binarySearch(leapYears, year)) >= 0; +// double Year = year; +// Year = (Year - 474) % 128; +// Year = ((Year >= 30) ? 0 : 29) + Year; +// Year = Year - Math.floor(Year / 33) - 1; +// return ((Year % 4) == 0); + } + + /** + * Check static is leap year for Jalali Date + * + * @param year Jalali year + * @return true if year is leap + */ + public static boolean isJalaliLeap(int year) { + return (new PersianDate().isLeap(year)); + } + + /** + * Check static is leap year for Grg Date + * + * @param year Year + * @return boolean + */ + public static boolean isGrgLeap(int year) { + return (new PersianDate().grgIsLeap(year)); + } + + /** + * Convert Grg date to jalali date + * + * @param year year in Grg date + * @param month month in Grg date + * @param day day in Grg date + * @return a int[year][month][day] in jalali date + */ + public int[] toJalali(int year, int month, int day) { + int hshDay = 1; + int hshMonth = 1; + int hshElapsed; + int hshYear = year - 621; + boolean grgLeap = this.grgIsLeap(year); + boolean hshLeap = this.isLeap(hshYear - 1); + int grgElapsed = grgSumOfDays[(grgLeap ? 1 : 0)][month - 1] + day; + int XmasToNorooz = (hshLeap && grgLeap) ? 80 : 79; + if (grgElapsed <= XmasToNorooz) { + hshElapsed = grgElapsed + 286; + hshYear--; + if (hshLeap && !grgLeap) { + hshElapsed++; + } + } else { + hshElapsed = grgElapsed - XmasToNorooz; + hshLeap = this.isLeap(hshYear); + } + if (year >= 2029 && (year - 2029) % 4 == 0) { + hshElapsed++; + } + for (int i = 1; i <= 12; i++) { + if (hshSumOfDays[(hshLeap ? 1 : 0)][i] >= hshElapsed) { + hshMonth = i; + hshDay = hshElapsed - hshSumOfDays[(hshLeap ? 1 : 0)][i - 1]; + break; + } + } + return new int[]{hshYear, hshMonth, hshDay}; + } + + /** + * Convert Jalali date to Grg + * + * @param year Year in jalali + * @param month Month in Jalali + * @param day Day in Jalali + * @return int[year][month][day] + */ + public int[] toGregorian(int year, int month, int day) { + int grgYear = year + 621; + int grgDay = 0; + int grgMonth = 0; + int grgElapsed; + + boolean hshLeap = this.isLeap(year); + boolean grgLeap = this.grgIsLeap(grgYear); + + int hshElapsed = hshSumOfDays[hshLeap ? 1 : 0][month - 1] + day; + + if (month > 10 || (month == 10 && hshElapsed > 286 + (grgLeap ? 1 : 0))) { + grgElapsed = hshElapsed - (286 + (grgLeap ? 1 : 0)); + grgLeap = grgIsLeap(++grgYear); + } else { + hshLeap = this.isLeap(year - 1); + grgElapsed = hshElapsed + 79 + (hshLeap ? 1 : 0) - (grgIsLeap(grgYear - 1) ? 1 : 0); + } + if (grgYear >= 2030 && (grgYear - 2030) % 4 == 0) { + grgElapsed--; + } + if (grgYear == 1989) { + grgElapsed++; + } + for (int i = 1; i <= 12; i++) { + if (grgSumOfDays[grgLeap ? 1 : 0][i] >= grgElapsed) { + grgMonth = i; + grgDay = grgElapsed - grgSumOfDays[grgLeap ? 1 : 0][i - 1]; + break; + } + } + return new int[]{grgYear, grgMonth, grgDay}; + } + + /** + * calc day of week + * + * @return int + */ + public int dayOfWeek() { + return this.dayOfWeek(this); + } + + /** + * Get day of week from PersianDate object + * + * @param date persianDate + * @return int + */ + public int dayOfWeek(PersianDate date) { + return this.dayOfWeek(date.toDate()); + } + + /** + * Get day of week from Date object + * + * @param date Date + * @return int + */ + public int dayOfWeek(Date date) { + Calendar cal = Calendar.getInstance(); + cal.setTime(date); + if (cal.get(Calendar.DAY_OF_WEEK) == Calendar.SATURDAY) { + return 0; + } + return (cal.get(Calendar.DAY_OF_WEEK)); + } + + /** + * Return list of month + * @param dialect dialect + * @return month names + */ + public String[] monthList(Dialect dialect) { + switch (dialect){ + case AFGHAN: + return this.AfghanMonthNames; + case KURDISH: + return this.KurdishMonthNames; + case PASHTO: + return this.PashtoMonthNames; + case LATIN: + return this.monthNamesLatin; + default: + return this.monthNames; + } + } + /** + * Return list of month + * + * @return month names + */ + public String[] monthList() { + return monthList(Dialect.IRANIAN); + } + /** + * return month name + * + * @return string + */ + public String monthName(Dialect dialect) { + return monthName(this.getShMonth(),dialect); + } + + /** + * Return month name + * + * @param month Month + */ + public String monthName(int month, Dialect dialect) { + switch (dialect) { + case AFGHAN: + return this.AfghanMonthNames[month - 1]; + case KURDISH: + return this.KurdishMonthNames[month - 1]; + case PASHTO: + return this.PashtoMonthNames[month - 1]; + case LATIN: + return this.monthNamesLatin[month - 1]; + default: + return this.monthNames[month - 1]; + } + } + + /** + * Get current month name in Persian + */ + public String monthName() { + return monthName(Dialect.IRANIAN); + } + + /** + * Get month name in Afghan + */ + public String AfghanMonthName(int month) { + return this.AfghanMonthNames[month - 1]; + } + + /** + * Get current date Afghan month name + */ + public String AfghanMonthName() { + return this.AfghanMonthName(this.getShMonth()); + } + + /** + * Get month name in Kurdish + */ + public String KurdishMonthName(int month) { + return this.KurdishMonthNames[month - 1]; + } + + /** + * Get current date Kurdish month name + */ + public String KurdishMonthName() { + return this.KurdishMonthName(this.getShMonth()); + } + + /** + * Get month name in Pashto + */ + public String PashtoMonthName(int month) { + return this.PashtoMonthNames[month - 1]; + } + + /** + * Get current date Pashto month name + */ + public String PashtoMonthName() { + return this.PashtoMonthName(this.getShMonth()); + } + + + /** + * Get month name in monthNamesLatin + */ + public String monthNamesLatin(int month) { + return this.monthNamesLatin[month - 1]; + } + + /** + * Get current date monthNamesLatin month name + */ + public String monthNamesLatin() { + return this.monthNamesLatin(this.getShMonth()); + } + + + /** + * get day name + */ + public String dayName() { + return this.dayName(this); + } + + /** + * Get Day Name + */ + public String dayName(PersianDate date) { + return this.dayNames[this.dayOfWeek(date)]; + } + + /** + * Number days of month + * + * @return return days + */ + public int getMonthDays() { + return this.getMonthDays(this.getShYear(), this.getShMonth()); + } + + /** + * calc count of day in month + */ + public int getMonthDays(int Year, int month) { + if (month == 12 && !this.isLeap(Year)) { + return 29; + } + if (month <= 6) { + return 31; + } else { + return 30; + } + } + + /** + * calculate day in year + */ + public int getDayInYear() { + return this.getDayInYear(this.getShMonth(), getShDay()); + } + + /** + * Calc day of the year + * + * @param month Month + * @param day Day + */ + public int getDayInYear(int month, int day) { + for (int i = 1; i < month; i++) { + if (i <= 6) { + day += 31; + } else { + day += 30; + } + } + return day; + } + + /** + * add date + * + * @param year Number of Year you want add + * @param month Number of month you want add + * @param day Number of day you want add + * @param hour Number of hour you want add + * @param minute Number of minute you want add + * @param second Number of second you want add + * @return new date + */ + public PersianDate addDate(long year, long month, long day, long hour, long minute, long second) { + if (month >= 12) { + year += Math.round(month / 12); + month = month % 12; + } + for (long i = (year - 1); i >= 0; i--) { + if (this.isLeap(this.getShYear() + (int) i)) { + day += 366; + } else { + day += 365; + } + } + for (long i = (month - 1); i >= 0; i--) { + int monthTmp = this.getShMonth() + (int) i; + int yearTmp = this.getShYear(); + if (monthTmp > 12) { + monthTmp -= 12; + yearTmp++; + } + day += this.getMonthLength(yearTmp, monthTmp); + } + this.timeInMilliSecond += (day * 24 * 3_600 * 1_000); + this.timeInMilliSecond += ((second + (hour * 3600) + (minute * 60)) * 1_000); + this.changeTime(); + return this; + } + + /** + * add to date + * + * @param year Number of Year you want add + * @param month Number of month you want add + * @param day Number of day you want add + */ + public PersianDate addDate(long year, long month, long day) { + return this.addDate(year, month, day, 0, 0, 0); + } + + public PersianDate addYear(long year) { + return this.addDate(year, 0, 0L, 0, 0, 0); + } + + public PersianDate addMonth(long month) { + return this.addDate(0, month, 0L, 0, 0, 0); + } + + public PersianDate addWeek(long week) { + return this.addDate(0, 0, (week * 7), 0, 0, 0); + } + + public PersianDate addDay(long day) { + return this.addDate(0, 0, day, 0, 0, 0); + } + + /** + * Compare 2 date + * + * @param dateInput PersianDate type + */ + public Boolean after(PersianDate dateInput) { + return (this.timeInMilliSecond < dateInput.getTime()); + } + + /** + * compare to data + * + * @param dateInput Input + */ + public Boolean before(PersianDate dateInput) { + return (!this.after(dateInput)); + } + + /** + * Check date equals + */ + public Boolean equals(PersianDate dateInput) { + return (this.timeInMilliSecond.equals(dateInput.getTime())); + } + + /** + * compare two data + * + * @return 0 = equal,1=data1 > anotherDate,-1=data1 > anotherDate + */ + public int compareTo(PersianDate anotherDate) { + return (this.timeInMilliSecond.compareTo(anotherDate.getTime())); + } + + /** + * Return Day in different date + */ + public long getDayUntilToday() { + return this.getDayUntilToday(new PersianDate()); + } + + /** + * Return different just day in compare 2 date + * + * @param date date for compare + */ + public long getDayUntilToday(PersianDate date) { + long[] ret = this.untilToday(date); + return ret[0]; + } + + /** + * Calc different date until now + */ + public long[] untilToday() { + return this.untilToday(new PersianDate()); + } + + /** + * calculate different between 2 date + * + * @param date Date 1 + */ + public long[] untilToday(PersianDate date) { + long secondsInMilli = 1000; + long minutesInMilli = secondsInMilli * 60; + long hoursInMilli = minutesInMilli * 60; + long daysInMilli = hoursInMilli * 24; + long different = Math.abs(this.timeInMilliSecond - date.getTime()); + + long elapsedDays = different / daysInMilli; + different = different % daysInMilli; + + long elapsedHours = different / hoursInMilli; + different = different % hoursInMilli; + long elapsedMinutes = different / minutesInMilli; + different = different % minutesInMilli; + long elapsedSeconds = different / secondsInMilli; + return new long[]{elapsedDays, elapsedHours, elapsedMinutes, elapsedSeconds}; + } + + @Override + public String toString() { + return PersianDateFormat.format(this, null); + } + /*----- Helper Function-----*/ + + /** + * convert PersianDate class to date + */ + public Date toDate() { + return new Date(this.timeInMilliSecond); + } + + /** + * Helper function + */ + private String textNumberFilter(String date) { + if (date.length() < 2) { + return "0" + date; + } + return date; + } + + /** + * initialize with time in millisecond + */ + private void changeTime() { + this.initGrgDate(Integer.parseInt(new SimpleDateFormat("yyyy").format(this.timeInMilliSecond)), + Integer.parseInt(new SimpleDateFormat("MM").format(this.timeInMilliSecond)), + Integer.parseInt(new SimpleDateFormat("dd").format(this.timeInMilliSecond)), + Integer.parseInt(new SimpleDateFormat("HH").format(this.timeInMilliSecond)), + Integer.parseInt(new SimpleDateFormat("mm").format(this.timeInMilliSecond)), + Integer.parseInt(new SimpleDateFormat("ss").format(this.timeInMilliSecond))); + } + + /** + * Return today + */ + public static PersianDate today() { + PersianDate persianDate = new PersianDate(); + persianDate.setHour(0).setMinute(0).setSecond(0); + return persianDate; + } + + /** + * Get tomorrow + */ + public static PersianDate tomorrow() { + PersianDate persianDate = new PersianDate(); + persianDate.addDay(1); + persianDate.setHour(0).setMinute(0).setSecond(0); + return persianDate; + } + + /** + * Get start of day + */ + public PersianDate startOfDay(PersianDate persianDate) { + persianDate.setHour(0).setMinute(0).setSecond(0); + return persianDate; + } + + /** + * Get Start of day + */ + public PersianDate startOfDay() { + return this.startOfDay(this); + } + + /** + * Get end of day + */ + public PersianDate endOfDay(PersianDate persianDate) { + persianDate.setHour(23).setMinute(59).setSecond(59); + return persianDate; + } + + /** + * Get end of day + */ + public PersianDate endOfDay() { + return this.endOfDay(this); + } + + /** + * Check midnight + */ + public Boolean isMidNight(PersianDate persianDate) { + return persianDate.isMidNight(); + } + + /** + * Check is midNight + */ + public Boolean isMidNight() { + return (this.hour < 12); + } + + /** + * Get short name time of the day + */ + public String getShortTimeOfTheDay() { + return (this.isMidNight()) ? AM_SHORT_NAME : PM_SHORT_NAME; + } + + /** + * Get short name time of the day + */ + public String getShortTimeOfTheDay(PersianDate persianDate) { + return (persianDate.isMidNight()) ? AM_SHORT_NAME : PM_SHORT_NAME; + } + + /** + * Get time of the day + */ + public String getTimeOfTheDay() { + return (this.isMidNight()) ? AM_NAME : PM_NAME; + } + + /** + * Get time of the day + */ + public String getTimeOfTheDay(PersianDate persianDate) { + return (persianDate.isMidNight()) ? AM_NAME : PM_NAME; + } + + /** + * Get number of days in month + * + * @param year Jalali year + * @param month Jalali month + * @return number of days in month + */ + public Integer getMonthLength(Integer year, Integer month) { + if (month <= 6) { + return 31; + } else if (month <= 11) { + return 30; + } else { + if (this.isLeap(year)) { + return 30; + } else { + return 29; + } + } + } + + public Integer getMonthLengthPicker(Integer year, Integer month) { + if (month <= 5) { + return 31; + } else if (month <= 10) { + return 30; + } else { + if (this.isLeap(year)) { + return 30; + } else { + return 29; + } + } + } + + /** + * Get number of days in month + * + * @param persianDate persianDate object + * @return number of days in month + */ + public Integer getMonthLength(PersianDate persianDate) { + return this.getMonthLength(persianDate.getShYear(), persianDate.getShMonth()); + } + + /** + * Get number of days in month + * + * @return number of days in month + */ + public Integer getMonthLength() { + return this.getMonthLength(this); + } +} diff --git a/TMessagesProj/src/main/java/tw/nekomimi/nekogram/shamsicalendar/PersianDateFormat.java b/TMessagesProj/src/main/java/tw/nekomimi/nekogram/shamsicalendar/PersianDateFormat.java new file mode 100644 index 000000000..edbfdadaf --- /dev/null +++ b/TMessagesProj/src/main/java/tw/nekomimi/nekogram/shamsicalendar/PersianDateFormat.java @@ -0,0 +1,220 @@ + +package tw.nekomimi.nekogram.shamsicalendar; +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.util.ArrayList; +import java.util.Date; + +/** + * Created by Saman on 3/31/2017 AD. + */ + +public class PersianDateFormat { + //variable + /** + * Key for convert Date to String + */ + private String[] key = {"a", "l", "j", "F", "Y", "H", "i", "s", "d", "g", "n", "m", "t", "w", "y", + "z", "A", + "L","X","C","E","T","b","D","e","B","S"}; + private String pattern; + /** + * key_parse for convert String to PersianDate + * + * yyyy = Year (1396) MM = month (02-12-...) dd = day (13-02-15-...) HH = Hour (13-02-15-...) mm = + * minutes (13-02-15-...) ss = second (13-02-15-...) + */ + private String[] key_parse = {"yyyy", "MM", "dd", "HH", "mm", "ss"}; + + /** + * Constracutor + */ + public PersianDateFormat(String pattern) { + this.pattern = pattern; + } + + /** + * initilize pattern + */ + public PersianDateFormat() { + pattern = "l j F Y H:i:s"; + } + + + + + /** + * new patterns T for mounth name in latin ----- b for shortday in persian number ----- D for 4 digit year in persian number ---- e for short month in persian number + */ + + + + public static String format(PersianDate date, String pattern) { + if(pattern == null) pattern="l j F Y H:i:s"; + String[] key = {"a", "l", "j", "F", "Y", "H", "i", "s", "d", "g", "n", "m", "t", "w", "y", "z", + "A", "L","X","C","E","T","b","D","e","B","S"}; + String year2; + if (("" + date.getShYear()).length() == 2) { + year2 = "" + date.getShYear(); + } else if (("" + date.getShYear()).length() == 3) { + year2 = ("" + date.getShYear()).substring(2, 3); + } else { + year2 = ("" + date.getShYear()).substring(2, 4); + } + String[] values = {date.getShortTimeOfTheDay(), date.dayName(), "" + date.getShDay(), + date.monthName(), + "" + date.getShYear(), + textNumberFilterStatic("" + date.getHour()), textNumberFilterStatic("" + date.getMinute()), + textNumberFilterStatic("" + date.getSecond()), + textNumberFilterStatic("" + date.getShDay()), "" + date.getHour(), "" + date.getShMonth(), + textNumberFilterStatic("" + date.getShMonth()), + "" + date.getMonthDays(), "" + date.dayOfWeek(), year2, "" + date.getDayInYear(), + date.getTimeOfTheDay(), + (date.isLeap() ? "1" : "0"), + date.AfghanMonthName(), + date.KurdishMonthName(), + date.PashtoMonthName(), + date.monthNamesLatin(), + LanguageUtils.getPersianNumbers(String.valueOf(date.getShDay())), + LanguageUtils.getPersianNumbers(String.valueOf(date.getShYear())), + LanguageUtils.getPersianNumbers(String.valueOf( date.getShMonth())), + LanguageUtils.getPersianNumbers(String.valueOf(textNumberFilterStatic("" + date.getHour()))), + LanguageUtils.getPersianNumbers(String.valueOf(textNumberFilterStatic("" + date.getMinute()))) + + + }; + for (int i = 0; i < key.length; i++) { + pattern = pattern.replace(key[i], values[i]); + } + return pattern; + } + + public String format(PersianDate date) { + String year2 = null; + if (("" + date.getShYear()).length() == 2) { + year2 = "" + date.getShYear(); + } else if (("" + date.getShYear()).length() == 3) { + year2 = ("" + date.getShYear()).substring(2, 3); + } else { + year2 = ("" + date.getShYear()).substring(2, 4); + } + String[] values = {date.isMidNight() ? "ق.ظ" : "ب.ظ", date.dayName(), "" + date.getShDay(), + date.monthName(), + "" + date.getShYear(), + this.textNumberFilter("" + date.getHour()), this.textNumberFilter("" + date.getMinute()), + this.textNumberFilter("" + date.getSecond()), + this.textNumberFilter("" + date.getShDay()), "" + date.getHour(), "" + date.getShMonth(), + this.textNumberFilter("" + date.getShMonth()), + "" + date.getMonthDays(), "" + date.dayOfWeek(), year2, "" + date.getDayInYear(), + date.getTimeOfTheDay(), + (date.isLeap() ? "1" : "0"), + date.AfghanMonthName(), + date.KurdishMonthName(), + date.PashtoMonthName(), + date.monthNamesLatin(), + LanguageUtils.getPersianNumbers(String.valueOf(date.getShDay())), + LanguageUtils.getPersianNumbers(String.valueOf(date.getShYear())), + LanguageUtils.getPersianNumbers(String.valueOf( date.getShMonth())), + LanguageUtils.getPersianNumbers(String.valueOf(textNumberFilterStatic("" + date.getHour()))), + LanguageUtils.getPersianNumbers(String.valueOf(textNumberFilterStatic("" + date.getMinute()))) + }; + return this.stringUtils(this.pattern, this.key, values); + } + + /** + * Parse jalli date from String + * + * @param date date in string + */ + public PersianDate parse(String date) throws ParseException { + return this.parse(date, this.pattern); + } + + /** + * Parse jalli date from String + * + * @param date date in string + * @param pattern pattern + */ + public PersianDate parse(String date, String pattern) throws ParseException { + ArrayList JalaliDate = new ArrayList() {{ + add(0); + add(0); + add(0); + add(0); + add(0); + add(0); + }}; + for (int i = 0; i < key_parse.length; i++) { + if ((pattern.contains(key_parse[i]))) { + int start_temp = pattern.indexOf(key_parse[i]); + int end_temp = start_temp + key_parse[i].length(); + String dateReplace = date.substring(start_temp, end_temp); + if (dateReplace.matches("[-+]?\\d*\\.?\\d+")) { + JalaliDate.set(i, Integer.parseInt(dateReplace)); + } else { + throw new ParseException("Parse Exception", 10); + } + } + } + return new PersianDate() + .initJalaliDate(JalaliDate.get(0), JalaliDate.get(1), JalaliDate.get(2), JalaliDate.get(3), + JalaliDate.get(4), JalaliDate.get(5)); + } + + /** + * Convert String Grg date to persiand date object + * + * @param date date in String + * @return PersianDate object + */ + public PersianDate parseGrg(String date) throws ParseException { + return this.parseGrg(date, this.pattern); + } + + /** + * Convert String Grg date to persiand date object + * + * @param date date String + * @param pattern pattern + * @return PersianDate object + */ + public PersianDate parseGrg(String date, String pattern) throws ParseException { + Date dateInGrg = new SimpleDateFormat(pattern).parse(date); + return new PersianDate(dateInGrg.getTime()); + } + + /** + * Replace String + * + * @param text String + * @param key Loking for + * @param values Replace with + */ + private String stringUtils(String text, String[] key, String[] values) { + for (int i = 0; i < key.length; i++) { + text = text.replace(key[i], values[i]); + } + return text; + } + + /** + * add zero to start + * + * @param date data + * @return return string with 0 in start + */ + private String textNumberFilter(String date) { + if (date.length() < 2) { + return "0" + date; + } + return date; + } + + public static String textNumberFilterStatic(String date) { + if (date.length() < 2) { + return "0" + date; + } + return date; + } +} diff --git a/TMessagesProj/src/main/java/tw/nekomimi/nekogram/shamsicalendar/PersianDateParser.java b/TMessagesProj/src/main/java/tw/nekomimi/nekogram/shamsicalendar/PersianDateParser.java deleted file mode 100644 index f099d056b..000000000 --- a/TMessagesProj/src/main/java/tw/nekomimi/nekogram/shamsicalendar/PersianDateParser.java +++ /dev/null @@ -1,76 +0,0 @@ -package tw.nekomimi.nekogram.shamsicalendar; - -public class PersianDateParser { - private String dateString; - private String delimiter; - - public PersianDateParser(String dateString) { - this.delimiter = "/"; - this.dateString = dateString; - } - - public PersianDateParser(String dateString, String delimiter) { - this(dateString); - this.delimiter = delimiter; - } - - public PersianCalendar getPersianDate() { - checkDateStringInitialValidation(); - String[] tokens = splitDateString(normalizeDateString(this.dateString)); - int year = Integer.parseInt(tokens[0]); - int month = Integer.parseInt(tokens[1]); - int day = Integer.parseInt(tokens[2]); - checkPersianDateValidation(year, month, day); - PersianCalendar pCal = new PersianCalendar(); - pCal.setPersianDate(year, month, day); - return pCal; - } - - private void checkPersianDateValidation(int year, int month, int day) { - if (year < 1) { - throw new RuntimeException("year is not valid"); - } else if (month < 1 || month > 12) { - throw new RuntimeException("month is not valid"); - } else if (day < 1 || day > 31) { - throw new RuntimeException("day is not valid"); - } else if (month > 6 && day == 31) { - throw new RuntimeException("day is not valid"); - } else if (month == 12 && day == 30 && !PersianCalendarUtils.isPersianLeapYear(year)) { - throw new RuntimeException("day is not valid " + year + " is not a leap year"); - } - } - - private String normalizeDateString(String dateString) { - return dateString; - } - - private String[] splitDateString(String dateString) { - String[] tokens = dateString.split(this.delimiter); - if (tokens.length == 3) { - return tokens; - } - throw new RuntimeException("wrong date:" + dateString + " is not a Persian Date or can not be parsed"); - } - - private void checkDateStringInitialValidation() { - if (this.dateString == null) { - throw new RuntimeException("input didn't assing please use setDateString()"); - } - } - - public String getDateString() { - return this.dateString; - } - - public void setDateString(String dateString) { - this.dateString = dateString; - } - - public String getDelimiter() { - return this.delimiter; - } - - public void setDelimiter(String delimiter) { - this.delimiter = delimiter; - } -} \ No newline at end of file diff --git a/TMessagesProj/src/main/java/tw/nekomimi/nekogram/shamsicalendar/TimeZones.java b/TMessagesProj/src/main/java/tw/nekomimi/nekogram/shamsicalendar/TimeZones.java deleted file mode 100644 index 70aeb77a6..000000000 --- a/TMessagesProj/src/main/java/tw/nekomimi/nekogram/shamsicalendar/TimeZones.java +++ /dev/null @@ -1,575 +0,0 @@ -package tw.nekomimi.nekogram.shamsicalendar; - -import java.util.TimeZone; - -public enum TimeZones { - DEFAULT(TimeZone.getDefault()), - ACT(TimeZone.getTimeZone("ACT")), - AET(TimeZone.getTimeZone("AET")), - AFRICA_ABIDJAN(TimeZone.getTimeZone("Africa/Abidjan")), - AFRICA_ACCRA(TimeZone.getTimeZone("Africa/Accra")), - AFRICA_ADDIS_ABABA(TimeZone.getTimeZone("Africa/Addis_Ababa")), - AFRICA_ALGIERS(TimeZone.getTimeZone("Africa/Algiers")), - AFRICA_ASMERA(TimeZone.getTimeZone("Africa/Asmera")), - AFRICA_BAMAKO(TimeZone.getTimeZone("Africa/Bamako")), - AFRICA_BANGUI(TimeZone.getTimeZone("Africa/Bangui")), - AFRICA_BANJUL(TimeZone.getTimeZone("Africa/Banjul")), - AFRICA_BISSAU(TimeZone.getTimeZone("Africa/Bissau")), - AFRICA_BLANTYRE(TimeZone.getTimeZone("Africa/Blantyre")), - AFRICA_BRAZZAVILLE(TimeZone.getTimeZone("Africa/Brazzaville")), - AFRICA_BUJUMBURA(TimeZone.getTimeZone("Africa/Bujumbura")), - AFRICA_CAIRO(TimeZone.getTimeZone("Africa/Cairo")), - AFRICA_CASABLANCA(TimeZone.getTimeZone("Africa/Casablanca")), - AFRICA_CEUTA(TimeZone.getTimeZone("Africa/Ceuta")), - AFRICA_CONAKRY(TimeZone.getTimeZone("Africa/Conakry")), - AFRICA_DAKAR(TimeZone.getTimeZone("Africa/Dakar")), - AFRICA_DAR_ES_SALAAM(TimeZone.getTimeZone("Africa/Dar_es_Salaam")), - AFRICA_DJIBOUTI(TimeZone.getTimeZone("Africa/Djibouti")), - AFRICA_DOUALA(TimeZone.getTimeZone("Africa/Douala")), - AFRICA_EL_AAIUN(TimeZone.getTimeZone("Africa/El_Aaiun")), - AFRICA_FREETOWN(TimeZone.getTimeZone("Africa/Freetown")), - AFRICA_GABORONE(TimeZone.getTimeZone("Africa/Gaborone")), - AFRICA_HARARE(TimeZone.getTimeZone("Africa/Harare")), - AFRICA_JOHANNESBURG(TimeZone.getTimeZone("Africa/Johannesburg")), - AFRICA_KAMPALA(TimeZone.getTimeZone("Africa/Kampala")), - AFRICA_KHARTOUM(TimeZone.getTimeZone("Africa/Khartoum")), - AFRICA_KIGALI(TimeZone.getTimeZone("Africa/Kigali")), - AFRICA_KINSHASA(TimeZone.getTimeZone("Africa/Kinshasa")), - AFRICA_LAGOS(TimeZone.getTimeZone("Africa/Lagos")), - AFRICA_LIBREVILLE(TimeZone.getTimeZone("Africa/Libreville")), - AFRICA_LOME(TimeZone.getTimeZone("Africa/Lome")), - AFRICA_LUANDA(TimeZone.getTimeZone("Africa/Luanda")), - AFRICA_LUBUMBASHI(TimeZone.getTimeZone("Africa/Lubumbashi")), - AFRICA_LUSAKA(TimeZone.getTimeZone("Africa/Lusaka")), - AFRICA_MALABO(TimeZone.getTimeZone("Africa/Malabo")), - AFRICA_MAPUTO(TimeZone.getTimeZone("Africa/Maputo")), - AFRICA_MASERU(TimeZone.getTimeZone("Africa/Maseru")), - AFRICA_MBABANE(TimeZone.getTimeZone("Africa/Mbabane")), - AFRICA_MOGADISHU(TimeZone.getTimeZone("Africa/Mogadishu")), - AFRICA_MONROVIA(TimeZone.getTimeZone("Africa/Monrovia")), - AFRICA_NAIROBI(TimeZone.getTimeZone("Africa/Nairobi")), - AFRICA_NDJAMENA(TimeZone.getTimeZone("Africa/Ndjamena")), - AFRICA_NIAMEY(TimeZone.getTimeZone("Africa/Niamey")), - AFRICA_NOUAKCHOTT(TimeZone.getTimeZone("Africa/Nouakchott")), - AFRICA_OUAGADOUGOU(TimeZone.getTimeZone("Africa/Ouagadougou")), - AFRICA_PORTO_NOVO(TimeZone.getTimeZone("Africa/Porto-Novo")), - AFRICA_SAO_TOME(TimeZone.getTimeZone("Africa/Sao_Tome")), - AFRICA_TIMBUKTU(TimeZone.getTimeZone("Africa/Timbuktu")), - AFRICA_TRIPOLI(TimeZone.getTimeZone("Africa/Tripoli")), - AFRICA_TUNIS(TimeZone.getTimeZone("Africa/Tunis")), - AFRICA_WINDHOEK(TimeZone.getTimeZone("Africa/Windhoek")), - AGT(TimeZone.getTimeZone("AGT")), - AMERICA_ADAK(TimeZone.getTimeZone("America/Adak")), - AMERICA_ANCHORAGE(TimeZone.getTimeZone("America/Anchorage")), - AMERICA_ANGUILLA(TimeZone.getTimeZone("America/Anguilla")), - AMERICA_ANTIGUA(TimeZone.getTimeZone("America/Antigua")), - AMERICA_ARAGUAINA(TimeZone.getTimeZone("America/Araguaina")), - AMERICA_ARUBA(TimeZone.getTimeZone("America/Aruba")), - AMERICA_ASUNCION(TimeZone.getTimeZone("America/Asuncion")), - AMERICA_ATKA(TimeZone.getTimeZone("America/Atka")), - AMERICA_BARBADOS(TimeZone.getTimeZone("America/Barbados")), - AMERICA_BELEM(TimeZone.getTimeZone("America/Belem")), - AMERICA_BELIZE(TimeZone.getTimeZone("America/Belize")), - AMERICA_BOA_VISTA(TimeZone.getTimeZone("America/Boa_Vista")), - AMERICA_BOGOTA(TimeZone.getTimeZone("America/Bogota")), - AMERICA_BOISE(TimeZone.getTimeZone("America/Boise")), - AMERICA_BUENOS_AIRES(TimeZone.getTimeZone("America/Buenos_Aires")), - AMERICA_CAMBRIDGE_BAY(TimeZone.getTimeZone("America/Cambridge_Bay")), - AMERICA_CANCUN(TimeZone.getTimeZone("America/Cancun")), - AMERICA_CARACAS(TimeZone.getTimeZone("America/Caracas")), - AMERICA_CATAMARCA(TimeZone.getTimeZone("America/Catamarca")), - AMERICA_CAYENNE(TimeZone.getTimeZone("America/Cayenne")), - AMERICA_CAYMAN(TimeZone.getTimeZone("America/Cayman")), - AMERICA_CHICAGO(TimeZone.getTimeZone("America/Chicago")), - AMERICA_CHIHUAHUA(TimeZone.getTimeZone("America/Chihuahua")), - AMERICA_CORDOBA(TimeZone.getTimeZone("America/Cordoba")), - AMERICA_COSTA_RICA(TimeZone.getTimeZone("America/Costa_Rica")), - AMERICA_CUIABA(TimeZone.getTimeZone("America/Cuiaba")), - AMERICA_CURACAO(TimeZone.getTimeZone("America/Curacao")), - AMERICA_DANMARKSHAVN(TimeZone.getTimeZone("America/Danmarkshavn")), - AMERICA_DAWSON(TimeZone.getTimeZone("America/Dawson")), - AMERICA_DAWSON_CREEK(TimeZone.getTimeZone("America/Dawson_Creek")), - AMERICA_DENVER(TimeZone.getTimeZone("America/Denver")), - AMERICA_DETROIT(TimeZone.getTimeZone("America/Detroit")), - AMERICA_DOMINICA(TimeZone.getTimeZone("America/Dominica")), - AMERICA_EDMONTON(TimeZone.getTimeZone("America/Edmonton")), - AMERICA_EIRUNEPE(TimeZone.getTimeZone("America/Eirunepe")), - AMERICA_EL_SALVADOR(TimeZone.getTimeZone("America/El_Salvador")), - AMERICA_ENSENADA(TimeZone.getTimeZone("America/Ensenada")), - AMERICA_FORT_WAYNE(TimeZone.getTimeZone("America/Fort_Wayne")), - AMERICA_FORTALEZA(TimeZone.getTimeZone("America/Fortaleza")), - AMERICA_GLACE_BAY(TimeZone.getTimeZone("America/Glace_Bay")), - AMERICA_GODTHAB(TimeZone.getTimeZone("America/Godthab")), - AMERICA_GOOSE_BAY(TimeZone.getTimeZone("America/Goose_Bay")), - AMERICA_GRAND_TURK(TimeZone.getTimeZone("America/Grand_Turk")), - AMERICA_GRENADA(TimeZone.getTimeZone("America/Grenada")), - AMERICA_GUADELOUPE(TimeZone.getTimeZone("America/Guadeloupe")), - AMERICA_GUATEMALA(TimeZone.getTimeZone("America/Guatemala")), - AMERICA_GUAYAQUIL(TimeZone.getTimeZone("America/Guayaquil")), - AMERICA_GUYANA(TimeZone.getTimeZone("America/Guyana")), - AMERICA_HALIFAX(TimeZone.getTimeZone("America/Halifax")), - AMERICA_HAVANA(TimeZone.getTimeZone("America/Havana")), - AMERICA_HERMOSILLO(TimeZone.getTimeZone("America/Hermosillo")), - AMERICA_INDIANA_INDIANAPOLIS(TimeZone.getTimeZone("America/Indiana/Indianapolis")), - AMERICA_INDIANA_KNOX(TimeZone.getTimeZone("America/Indiana/Knox")), - AMERICA_INDIANA_MARENGO(TimeZone.getTimeZone("America/Indiana/Marengo")), - AMERICA_INDIANA_VEVAY(TimeZone.getTimeZone("America/Indiana/Vevay")), - AMERICA_INDIANAPOLIS(TimeZone.getTimeZone("America/Indianapolis")), - AMERICA_INUVIK(TimeZone.getTimeZone("America/Inuvik")), - AMERICA_IQALUIT(TimeZone.getTimeZone("America/Iqaluit")), - AMERICA_JAMAICA(TimeZone.getTimeZone("America/Jamaica")), - AMERICA_JUJUY(TimeZone.getTimeZone("America/Jujuy")), - AMERICA_JUNEAU(TimeZone.getTimeZone("America/Juneau")), - AMERICA_KENTUCKY_LOUISVILLE(TimeZone.getTimeZone("America/Kentucky/Louisville")), - AMERICA_KENTUCKY_MONTICELLO(TimeZone.getTimeZone("America/Kentucky/Monticello")), - AMERICA_KNOX_IN(TimeZone.getTimeZone("America/Knox_IN")), - AMERICA_LA_PAZ(TimeZone.getTimeZone("America/La_Paz")), - AMERICA_LIMA(TimeZone.getTimeZone("America/Lima")), - AMERICA_LOS_ANGELES(TimeZone.getTimeZone("America/Los_Angeles")), - AMERICA_LOUISVILLE(TimeZone.getTimeZone("America/Louisville")), - AMERICA_MACEIO(TimeZone.getTimeZone("America/Maceio")), - AMERICA_MANAGUA(TimeZone.getTimeZone("America/Managua")), - AMERICA_MANAUS(TimeZone.getTimeZone("America/Manaus")), - AMERICA_MARTINIQUE(TimeZone.getTimeZone("America/Martinique")), - AMERICA_MAZATLAN(TimeZone.getTimeZone("America/Mazatlan")), - AMERICA_MENDOZA(TimeZone.getTimeZone("America/Mendoza")), - AMERICA_MENOMINEE(TimeZone.getTimeZone("America/Menominee")), - AMERICA_MERIDA(TimeZone.getTimeZone("America/Merida")), - AMERICA_MEXICO_CITY(TimeZone.getTimeZone("America/Mexico_City")), - AMERICA_MIQUELON(TimeZone.getTimeZone("America/Miquelon")), - AMERICA_MONTERREY(TimeZone.getTimeZone("America/Monterrey")), - AMERICA_MONTEVIDEO(TimeZone.getTimeZone("America/Montevideo")), - AMERICA_MONTREAL(TimeZone.getTimeZone("America/Montreal")), - AMERICA_MONTSERRAT(TimeZone.getTimeZone("America/Montserrat")), - AMERICA_NASSAU(TimeZone.getTimeZone("America/Nassau")), - AMERICA_NEW_YORK(TimeZone.getTimeZone("America/New_York")), - AMERICA_NIPIGON(TimeZone.getTimeZone("America/Nipigon")), - AMERICA_NOME(TimeZone.getTimeZone("America/Nome")), - AMERICA_NORONHA(TimeZone.getTimeZone("America/Noronha")), - AMERICA_NORTH_DAKOTA_CENTER(TimeZone.getTimeZone("America/North_Dakota/Center")), - AMERICA_PANAMA(TimeZone.getTimeZone("America/Panama")), - AMERICA_PANGNIRTUNG(TimeZone.getTimeZone("America/Pangnirtung")), - AMERICA_PARAMARIBO(TimeZone.getTimeZone("America/Paramaribo")), - AMERICA_PHOENIX(TimeZone.getTimeZone("America/Phoenix")), - AMERICA_PORT_AU_PRINCE(TimeZone.getTimeZone("America/Port-au-Prince")), - AMERICA_PORT_OF_SPAIN(TimeZone.getTimeZone("America/Port_of_Spain")), - AMERICA_PORTO_ACRE(TimeZone.getTimeZone("America/Porto_Acre")), - AMERICA_PORTO_VELHO(TimeZone.getTimeZone("America/Porto_Velho")), - AMERICA_PUERTO_RICO(TimeZone.getTimeZone("America/Puerto_Rico")), - AMERICA_RAINY_RIVER(TimeZone.getTimeZone("America/Rainy_River")), - AMERICA_RANKIN_INLET(TimeZone.getTimeZone("America/Rankin_Inlet")), - AMERICA_RECIFE(TimeZone.getTimeZone("America/Recife")), - AMERICA_REGINA(TimeZone.getTimeZone("America/Regina")), - AMERICA_RIO_BRANCO(TimeZone.getTimeZone("America/Rio_Branco")), - AMERICA_ROSARIO(TimeZone.getTimeZone("America/Rosario")), - AMERICA_SANTIAGO(TimeZone.getTimeZone("America/Santiago")), - AMERICA_SANTO_DOMINGO(TimeZone.getTimeZone("America/Santo_Domingo")), - AMERICA_SAO_PAULO(TimeZone.getTimeZone("America/Sao_Paulo")), - AMERICA_SCORESBYSUND(TimeZone.getTimeZone("America/Scoresbysund")), - AMERICA_SHIPROCK(TimeZone.getTimeZone("America/Shiprock")), - AMERICA_ST_JOHNS(TimeZone.getTimeZone("America/St_Johns")), - AMERICA_ST_KITTS(TimeZone.getTimeZone("America/St_Kitts")), - AMERICA_ST_LUCIA(TimeZone.getTimeZone("America/St_Lucia")), - AMERICA_ST_THOMAS(TimeZone.getTimeZone("America/St_Thomas")), - AMERICA_ST_VINCENT(TimeZone.getTimeZone("America/St_Vincent")), - AMERICA_SWIFT_CURRENT(TimeZone.getTimeZone("America/Swift_Current")), - AMERICA_TEGUCIGALPA(TimeZone.getTimeZone("America/Tegucigalpa")), - AMERICA_THULE(TimeZone.getTimeZone("America/Thule")), - AMERICA_THUNDER_BAY(TimeZone.getTimeZone("America/Thunder_Bay")), - AMERICA_TIJUANA(TimeZone.getTimeZone("America/Tijuana")), - AMERICA_TORTOLA(TimeZone.getTimeZone("America/Tortola")), - AMERICA_VANCOUVER(TimeZone.getTimeZone("America/Vancouver")), - AMERICA_VIRGIN(TimeZone.getTimeZone("America/Virgin")), - AMERICA_WHITEHORSE(TimeZone.getTimeZone("America/Whitehorse")), - AMERICA_WINNIPEG(TimeZone.getTimeZone("America/Winnipeg")), - AMERICA_YAKUTAT(TimeZone.getTimeZone("America/Yakutat")), - AMERICA_YELLOWKNIFE(TimeZone.getTimeZone("America/Yellowknife")), - ANTARCTICA_CASEY(TimeZone.getTimeZone("Antarctica/Casey")), - ANTARCTICA_DAVIS(TimeZone.getTimeZone("Antarctica/Davis")), - ANTARCTICA_DUMONTDURVILLE(TimeZone.getTimeZone("Antarctica/DumontDUrville")), - ANTARCTICA_MAWSON(TimeZone.getTimeZone("Antarctica/Mawson")), - ANTARCTICA_MCMURDO(TimeZone.getTimeZone("Antarctica/McMurdo")), - ANTARCTICA_PALMER(TimeZone.getTimeZone("Antarctica/Palmer")), - ANTARCTICA_ROTHERA(TimeZone.getTimeZone("Antarctica/Rothera")), - ANTARCTICA_SOUTH_POLE(TimeZone.getTimeZone("Antarctica/South_Pole")), - ANTARCTICA_SYOWA(TimeZone.getTimeZone("Antarctica/Syowa")), - ANTARCTICA_VOSTOK(TimeZone.getTimeZone("Antarctica/Vostok")), - ARCTIC_LONGYEARBYEN(TimeZone.getTimeZone("Arctic/Longyearbyen")), - ART(TimeZone.getTimeZone("ART")), - ASIA_ADEN(TimeZone.getTimeZone("Asia/Aden")), - ASIA_ALMATY(TimeZone.getTimeZone("Asia/Almaty")), - ASIA_AMMAN(TimeZone.getTimeZone("Asia/Amman")), - ASIA_ANADYR(TimeZone.getTimeZone("Asia/Anadyr")), - ASIA_AQTAU(TimeZone.getTimeZone("Asia/Aqtau")), - ASIA_AQTOBE(TimeZone.getTimeZone("Asia/Aqtobe")), - ASIA_ASHGABAT(TimeZone.getTimeZone("Asia/Ashgabat")), - ASIA_ASHKHABAD(TimeZone.getTimeZone("Asia/Ashkhabad")), - ASIA_BAGHDAD(TimeZone.getTimeZone("Asia/Baghdad")), - ASIA_BAHRAIN(TimeZone.getTimeZone("Asia/Bahrain")), - ASIA_BAKU(TimeZone.getTimeZone("Asia/Baku")), - ASIA_BANGKOK(TimeZone.getTimeZone("Asia/Bangkok")), - ASIA_BEIRUT(TimeZone.getTimeZone("Asia/Beirut")), - ASIA_BISHKEK(TimeZone.getTimeZone("Asia/Bishkek")), - ASIA_BRUNEI(TimeZone.getTimeZone("Asia/Brunei")), - ASIA_CALCUTTA(TimeZone.getTimeZone("Asia/Calcutta")), - ASIA_CHOIBALSAN(TimeZone.getTimeZone("Asia/Choibalsan")), - ASIA_CHONGQING(TimeZone.getTimeZone("Asia/Chongqing")), - ASIA_CHUNGKING(TimeZone.getTimeZone("Asia/Chungking")), - ASIA_COLOMBO(TimeZone.getTimeZone("Asia/Colombo")), - ASIA_DACCA(TimeZone.getTimeZone("Asia/Dacca")), - ASIA_DAMASCUS(TimeZone.getTimeZone("Asia/Damascus")), - ASIA_DHAKA(TimeZone.getTimeZone("Asia/Dhaka")), - ASIA_DILI(TimeZone.getTimeZone("Asia/Dili")), - ASIA_DUBAI(TimeZone.getTimeZone("Asia/Dubai")), - ASIA_DUSHANBE(TimeZone.getTimeZone("Asia/Dushanbe")), - ASIA_GAZA(TimeZone.getTimeZone("Asia/Gaza")), - ASIA_HARBIN(TimeZone.getTimeZone("Asia/Harbin")), - ASIA_HONG_KONG(TimeZone.getTimeZone("Asia/Hong_Kong")), - ASIA_HOVD(TimeZone.getTimeZone("Asia/Hovd")), - ASIA_IRKUTSK(TimeZone.getTimeZone("Asia/Irkutsk")), - ASIA_ISTANBUL(TimeZone.getTimeZone("Asia/Istanbul")), - ASIA_JAKARTA(TimeZone.getTimeZone("Asia/Jakarta")), - ASIA_JAYAPURA(TimeZone.getTimeZone("Asia/Jayapura")), - ASIA_JERUSALEM(TimeZone.getTimeZone("Asia/Jerusalem")), - ASIA_KABUL(TimeZone.getTimeZone("Asia/Kabul")), - ASIA_KAMCHATKA(TimeZone.getTimeZone("Asia/Kamchatka")), - ASIA_KARACHI(TimeZone.getTimeZone("Asia/Karachi")), - ASIA_KASHGAR(TimeZone.getTimeZone("Asia/Kashgar")), - ASIA_KATMANDU(TimeZone.getTimeZone("Asia/Katmandu")), - ASIA_KRASNOYARSK(TimeZone.getTimeZone("Asia/Krasnoyarsk")), - ASIA_KUALA_LUMPUR(TimeZone.getTimeZone("Asia/Kuala_Lumpur")), - ASIA_KUCHING(TimeZone.getTimeZone("Asia/Kuching")), - ASIA_KUWAIT(TimeZone.getTimeZone("Asia/Kuwait")), - ASIA_MACAO(TimeZone.getTimeZone("Asia/Macao")), - ASIA_MACAU(TimeZone.getTimeZone("Asia/Macau")), - ASIA_MAGADAN(TimeZone.getTimeZone("Asia/Magadan")), - ASIA_MAKASSAR(TimeZone.getTimeZone("Asia/Makassar")), - ASIA_MANILA(TimeZone.getTimeZone("Asia/Manila")), - ASIA_MUSCAT(TimeZone.getTimeZone("Asia/Muscat")), - ASIA_NICOSIA(TimeZone.getTimeZone("Asia/Nicosia")), - ASIA_NOVOSIBIRSK(TimeZone.getTimeZone("Asia/Novosibirsk")), - ASIA_OMSK(TimeZone.getTimeZone("Asia/Omsk")), - ASIA_ORAL(TimeZone.getTimeZone("Asia/Oral")), - ASIA_PHNOM_PENH(TimeZone.getTimeZone("Asia/Phnom_Penh")), - ASIA_PONTIANAK(TimeZone.getTimeZone("Asia/Pontianak")), - ASIA_PYONGYANG(TimeZone.getTimeZone("Asia/Pyongyang")), - ASIA_QATAR(TimeZone.getTimeZone("Asia/Qatar")), - ASIA_QYZYLORDA(TimeZone.getTimeZone("Asia/Qyzylorda")), - ASIA_RANGOON(TimeZone.getTimeZone("Asia/Rangoon")), - ASIA_RIYADH(TimeZone.getTimeZone("Asia/Riyadh")), - ASIA_RIYADH87(TimeZone.getTimeZone("Asia/Riyadh87")), - ASIA_RIYADH88(TimeZone.getTimeZone("Asia/Riyadh88")), - ASIA_RIYADH89(TimeZone.getTimeZone("Asia/Riyadh89")), - ASIA_SAIGON(TimeZone.getTimeZone("Asia/Saigon")), - ASIA_SAKHALIN(TimeZone.getTimeZone("Asia/Sakhalin")), - ASIA_SAMARKAND(TimeZone.getTimeZone("Asia/Samarkand")), - ASIA_SEOUL(TimeZone.getTimeZone("Asia/Seoul")), - ASIA_SHANGHAI(TimeZone.getTimeZone("Asia/Shanghai")), - ASIA_SINGAPORE(TimeZone.getTimeZone("Asia/Singapore")), - ASIA_TAIPEI(TimeZone.getTimeZone("Asia/Taipei")), - ASIA_TASHKENT(TimeZone.getTimeZone("Asia/Tashkent")), - ASIA_TBILISI(TimeZone.getTimeZone("Asia/Tbilisi")), - ASIA_TEHRAN(TimeZone.getTimeZone("Asia/Tehran")), - ASIA_TEL_AVIV(TimeZone.getTimeZone("Asia/Tel_Aviv")), - ASIA_THIMBU(TimeZone.getTimeZone("Asia/Thimbu")), - ASIA_THIMPHU(TimeZone.getTimeZone("Asia/Thimphu")), - ASIA_TOKYO(TimeZone.getTimeZone("Asia/Tokyo")), - ASIA_UJUNG_PANDANG(TimeZone.getTimeZone("Asia/Ujung_Pandang")), - ASIA_ULAANBAATAR(TimeZone.getTimeZone("Asia/Ulaanbaatar")), - ASIA_ULAN_BATOR(TimeZone.getTimeZone("Asia/Ulan_Bator")), - ASIA_URUMQI(TimeZone.getTimeZone("Asia/Urumqi")), - ASIA_VIENTIANE(TimeZone.getTimeZone("Asia/Vientiane")), - ASIA_VLADIVOSTOK(TimeZone.getTimeZone("Asia/Vladivostok")), - ASIA_YAKUTSK(TimeZone.getTimeZone("Asia/Yakutsk")), - ASIA_YEKATERINBURG(TimeZone.getTimeZone("Asia/Yekaterinburg")), - ASIA_YEREVAN(TimeZone.getTimeZone("Asia/Yerevan")), - AST(TimeZone.getTimeZone("AST")), - ATLANTIC_AZORES(TimeZone.getTimeZone("Atlantic/Azores")), - ATLANTIC_BERMUDA(TimeZone.getTimeZone("Atlantic/Bermuda")), - ATLANTIC_CANARY(TimeZone.getTimeZone("Atlantic/Canary")), - ATLANTIC_CAPE_VERDE(TimeZone.getTimeZone("Atlantic/Cape_Verde")), - ATLANTIC_FAEROE(TimeZone.getTimeZone("Atlantic/Faeroe")), - ATLANTIC_JAN_MAYEN(TimeZone.getTimeZone("Atlantic/Jan_Mayen")), - ATLANTIC_MADEIRA(TimeZone.getTimeZone("Atlantic/Madeira")), - ATLANTIC_REYKJAVIK(TimeZone.getTimeZone("Atlantic/Reykjavik")), - ATLANTIC_SOUTH_GEORGIA(TimeZone.getTimeZone("Atlantic/South_Georgia")), - ATLANTIC_ST_HELENA(TimeZone.getTimeZone("Atlantic/St_Helena")), - ATLANTIC_STANLEY(TimeZone.getTimeZone("Atlantic/Stanley")), - AUSTRALIA_ACT(TimeZone.getTimeZone("Australia/ACT")), - AUSTRALIA_ADELAIDE(TimeZone.getTimeZone("Australia/Adelaide")), - AUSTRALIA_BRISBANE(TimeZone.getTimeZone("Australia/Brisbane")), - AUSTRALIA_BROKEN_HILL(TimeZone.getTimeZone("Australia/Broken_Hill")), - AUSTRALIA_CANBERRA(TimeZone.getTimeZone("Australia/Canberra")), - AUSTRALIA_DARWIN(TimeZone.getTimeZone("Australia/Darwin")), - AUSTRALIA_HOBART(TimeZone.getTimeZone("Australia/Hobart")), - AUSTRALIA_LHI(TimeZone.getTimeZone("Australia/LHI")), - AUSTRALIA_LINDEMAN(TimeZone.getTimeZone("Australia/Lindeman")), - AUSTRALIA_LORD_HOWE(TimeZone.getTimeZone("Australia/Lord_Howe")), - AUSTRALIA_MELBOURNE(TimeZone.getTimeZone("Australia/Melbourne")), - AUSTRALIA_NORTH(TimeZone.getTimeZone("Australia/North")), - AUSTRALIA_NSW(TimeZone.getTimeZone("Australia/NSW")), - AUSTRALIA_PERTH(TimeZone.getTimeZone("Australia/Perth")), - AUSTRALIA_QUEENSLAND(TimeZone.getTimeZone("Australia/Queensland")), - AUSTRALIA_SOUTH(TimeZone.getTimeZone("Australia/South")), - AUSTRALIA_SYDNEY(TimeZone.getTimeZone("Australia/Sydney")), - AUSTRALIA_TASMANIA(TimeZone.getTimeZone("Australia/Tasmania")), - AUSTRALIA_VICTORIA(TimeZone.getTimeZone("Australia/Victoria")), - AUSTRALIA_WEST(TimeZone.getTimeZone("Australia/West")), - AUSTRALIA_YANCOWINNA(TimeZone.getTimeZone("Australia/Yancowinna")), - BET(TimeZone.getTimeZone("BET")), - BRAZIL_ACRE(TimeZone.getTimeZone("Brazil/Acre")), - BRAZIL_DENORONHA(TimeZone.getTimeZone("Brazil/DeNoronha")), - BRAZIL_EAST(TimeZone.getTimeZone("Brazil/East")), - BRAZIL_WEST(TimeZone.getTimeZone("Brazil/West")), - BST(TimeZone.getTimeZone("BST")), - CANADA_ATLANTIC(TimeZone.getTimeZone("Canada/Atlantic")), - CANADA_CENTRAL(TimeZone.getTimeZone("Canada/Central")), - CANADA_EAST_SASKATCHEWAN(TimeZone.getTimeZone("Canada/East-Saskatchewan")), - CANADA_EASTERN(TimeZone.getTimeZone("Canada/Eastern")), - CANADA_MOUNTAIN(TimeZone.getTimeZone("Canada/Mountain")), - CANADA_NEWFOUNDLAND(TimeZone.getTimeZone("Canada/Newfoundland")), - CANADA_PACIFIC(TimeZone.getTimeZone("Canada/Pacific")), - CANADA_SASKATCHEWAN(TimeZone.getTimeZone("Canada/Saskatchewan")), - CANADA_YUKON(TimeZone.getTimeZone("Canada/Yukon")), - CAT(TimeZone.getTimeZone("CAT")), - CET(TimeZone.getTimeZone("CET")), - CHILE_CONTINENTAL(TimeZone.getTimeZone("Chile/Continental")), - CHILE_EASTERISLAND(TimeZone.getTimeZone("Chile/EasterIsland")), - CNT(TimeZone.getTimeZone("CNT")), - CST(TimeZone.getTimeZone("CST")), - CST6CDT(TimeZone.getTimeZone("CST6CDT")), - CTT(TimeZone.getTimeZone("CTT")), - CUBA(TimeZone.getTimeZone("Cuba")), - EAT(TimeZone.getTimeZone("EAT")), - ECT(TimeZone.getTimeZone("ECT")), - EET(TimeZone.getTimeZone("EET")), - EGYPT(TimeZone.getTimeZone("Egypt")), - EIRE(TimeZone.getTimeZone("Eire")), - EST(TimeZone.getTimeZone("EST")), - EST5EDT(TimeZone.getTimeZone("EST5EDT")), - ETC_GMT(TimeZone.getTimeZone("Etc/GMT")), - ETC_GMT_PLUS_0(TimeZone.getTimeZone("Etc/GMT+0")), - ETC_GMT_PLUS_1(TimeZone.getTimeZone("Etc/GMT+1")), - ETC_GMT_PLUS_10(TimeZone.getTimeZone("Etc/GMT+10")), - ETC_GMT_PLUS_11(TimeZone.getTimeZone("Etc/GMT+11")), - ETC_GMT_PLUS_12(TimeZone.getTimeZone("Etc/GMT+12")), - ETC_GMT_PLUS_2(TimeZone.getTimeZone("Etc/GMT+2")), - ETC_GMT_PLUS_3(TimeZone.getTimeZone("Etc/GMT+3")), - ETC_GMT_PLUS_4(TimeZone.getTimeZone("Etc/GMT+4")), - ETC_GMT_PLUS_5(TimeZone.getTimeZone("Etc/GMT+5")), - ETC_GMT_PLUS_6(TimeZone.getTimeZone("Etc/GMT+6")), - ETC_GMT_PLUS_7(TimeZone.getTimeZone("Etc/GMT+7")), - ETC_GMT_PLUS_8(TimeZone.getTimeZone("Etc/GMT+8")), - ETC_GMT_PLUS_9(TimeZone.getTimeZone("Etc/GMT+9")), - ETC_GMT_MINUS_0(TimeZone.getTimeZone("Etc/GMT-0")), - ETC_GMT_MINUS_1(TimeZone.getTimeZone("Etc/GMT-1")), - ETC_GMT_MINUS_10(TimeZone.getTimeZone("Etc/GMT-10")), - ETC_GMT_MINUS_11(TimeZone.getTimeZone("Etc/GMT-11")), - ETC_GMT_MINUS_12(TimeZone.getTimeZone("Etc/GMT-12")), - ETC_GMT_MINUS_13(TimeZone.getTimeZone("Etc/GMT-13")), - ETC_GMT_MINUS_14(TimeZone.getTimeZone("Etc/GMT-14")), - ETC_GMT_MINUS_2(TimeZone.getTimeZone("Etc/GMT-2")), - ETC_GMT_MINUS_3(TimeZone.getTimeZone("Etc/GMT-3")), - ETC_GMT_MINUS_4(TimeZone.getTimeZone("Etc/GMT-4")), - ETC_GMT_MINUS_5(TimeZone.getTimeZone("Etc/GMT-5")), - ETC_GMT_MINUS_6(TimeZone.getTimeZone("Etc/GMT-6")), - ETC_GMT_MINUS_7(TimeZone.getTimeZone("Etc/GMT-7")), - ETC_GMT_MINUS_8(TimeZone.getTimeZone("Etc/GMT-8")), - ETC_GMT_MINUS_9(TimeZone.getTimeZone("Etc/GMT-9")), - ETC_GMT0(TimeZone.getTimeZone("Etc/GMT0")), - ETC_GREENWICH(TimeZone.getTimeZone("Etc/Greenwich")), - ETC_UCT(TimeZone.getTimeZone("Etc/UCT")), - ETC_UNIVERSAL(TimeZone.getTimeZone("Etc/Universal")), - ETC_UTC(TimeZone.getTimeZone("Etc/UTC")), - ETC_ZULU(TimeZone.getTimeZone("Etc/Zulu")), - EUROPE_AMSTERDAM(TimeZone.getTimeZone("Europe/Amsterdam")), - EUROPE_ANDORRA(TimeZone.getTimeZone("Europe/Andorra")), - EUROPE_ATHENS(TimeZone.getTimeZone("Europe/Athens")), - EUROPE_BELFAST(TimeZone.getTimeZone("Europe/Belfast")), - EUROPE_BELGRADE(TimeZone.getTimeZone("Europe/Belgrade")), - EUROPE_BERLIN(TimeZone.getTimeZone("Europe/Berlin")), - EUROPE_BRATISLAVA(TimeZone.getTimeZone("Europe/Bratislava")), - EUROPE_BRUSSELS(TimeZone.getTimeZone("Europe/Brussels")), - EUROPE_BUCHAREST(TimeZone.getTimeZone("Europe/Bucharest")), - EUROPE_BUDAPEST(TimeZone.getTimeZone("Europe/Budapest")), - EUROPE_CHISINAU(TimeZone.getTimeZone("Europe/Chisinau")), - EUROPE_COPENHAGEN(TimeZone.getTimeZone("Europe/Copenhagen")), - EUROPE_DUBLIN(TimeZone.getTimeZone("Europe/Dublin")), - EUROPE_GIBRALTAR(TimeZone.getTimeZone("Europe/Gibraltar")), - EUROPE_HELSINKI(TimeZone.getTimeZone("Europe/Helsinki")), - EUROPE_ISTANBUL(TimeZone.getTimeZone("Europe/Istanbul")), - EUROPE_KALININGRAD(TimeZone.getTimeZone("Europe/Kaliningrad")), - EUROPE_KIEV(TimeZone.getTimeZone("Europe/Kiev")), - EUROPE_LISBON(TimeZone.getTimeZone("Europe/Lisbon")), - EUROPE_LJUBLJANA(TimeZone.getTimeZone("Europe/Ljubljana")), - EUROPE_LONDON(TimeZone.getTimeZone("Europe/London")), - EUROPE_LUXEMBOURG(TimeZone.getTimeZone("Europe/Luxembourg")), - EUROPE_MADRID(TimeZone.getTimeZone("Europe/Madrid")), - EUROPE_MALTA(TimeZone.getTimeZone("Europe/Malta")), - EUROPE_MINSK(TimeZone.getTimeZone("Europe/Minsk")), - EUROPE_MONACO(TimeZone.getTimeZone("Europe/Monaco")), - EUROPE_MOSCOW(TimeZone.getTimeZone("Europe/Moscow")), - EUROPE_NICOSIA(TimeZone.getTimeZone("Europe/Nicosia")), - EUROPE_OSLO(TimeZone.getTimeZone("Europe/Oslo")), - EUROPE_PARIS(TimeZone.getTimeZone("Europe/Paris")), - EUROPE_PRAGUE(TimeZone.getTimeZone("Europe/Prague")), - EUROPE_RIGA(TimeZone.getTimeZone("Europe/Riga")), - EUROPE_ROME(TimeZone.getTimeZone("Europe/Rome")), - EUROPE_SAMARA(TimeZone.getTimeZone("Europe/Samara")), - EUROPE_SAN_MARINO(TimeZone.getTimeZone("Europe/San_Marino")), - EUROPE_SARAJEVO(TimeZone.getTimeZone("Europe/Sarajevo")), - EUROPE_SIMFEROPOL(TimeZone.getTimeZone("Europe/Simferopol")), - EUROPE_SKOPJE(TimeZone.getTimeZone("Europe/Skopje")), - EUROPE_SOFIA(TimeZone.getTimeZone("Europe/Sofia")), - EUROPE_STOCKHOLM(TimeZone.getTimeZone("Europe/Stockholm")), - EUROPE_TALLINN(TimeZone.getTimeZone("Europe/Tallinn")), - EUROPE_TIRANE(TimeZone.getTimeZone("Europe/Tirane")), - EUROPE_TIRASPOL(TimeZone.getTimeZone("Europe/Tiraspol")), - EUROPE_UZHGOROD(TimeZone.getTimeZone("Europe/Uzhgorod")), - EUROPE_VADUZ(TimeZone.getTimeZone("Europe/Vaduz")), - EUROPE_VATICAN(TimeZone.getTimeZone("Europe/Vatican")), - EUROPE_VIENNA(TimeZone.getTimeZone("Europe/Vienna")), - EUROPE_VILNIUS(TimeZone.getTimeZone("Europe/Vilnius")), - EUROPE_WARSAW(TimeZone.getTimeZone("Europe/Warsaw")), - EUROPE_ZAGREB(TimeZone.getTimeZone("Europe/Zagreb")), - EUROPE_ZAPOROZHYE(TimeZone.getTimeZone("Europe/Zaporozhye")), - EUROPE_ZURICH(TimeZone.getTimeZone("Europe/Zurich")), - GB(TimeZone.getTimeZone("GB")), - GB_EIRE(TimeZone.getTimeZone("GB-Eire")), - GMT(TimeZone.getTimeZone("GMT")), - GMT0(TimeZone.getTimeZone("GMT0")), - GREENWICH(TimeZone.getTimeZone("Greenwich")), - HONGKONG(TimeZone.getTimeZone("Hongkong")), - HST(TimeZone.getTimeZone("HST")), - ICELAND(TimeZone.getTimeZone("Iceland")), - IET(TimeZone.getTimeZone("IET")), - INDIAN_ANTANANARIVO(TimeZone.getTimeZone("Indian/Antananarivo")), - INDIAN_CHAGOS(TimeZone.getTimeZone("Indian/Chagos")), - INDIAN_CHRISTMAS(TimeZone.getTimeZone("Indian/Christmas")), - INDIAN_COCOS(TimeZone.getTimeZone("Indian/Cocos")), - INDIAN_COMORO(TimeZone.getTimeZone("Indian/Comoro")), - INDIAN_KERGUELEN(TimeZone.getTimeZone("Indian/Kerguelen")), - INDIAN_MAHE(TimeZone.getTimeZone("Indian/Mahe")), - INDIAN_MALDIVES(TimeZone.getTimeZone("Indian/Maldives")), - INDIAN_MAURITIUS(TimeZone.getTimeZone("Indian/Mauritius")), - INDIAN_MAYOTTE(TimeZone.getTimeZone("Indian/Mayotte")), - INDIAN_REUNION(TimeZone.getTimeZone("Indian/Reunion")), - IRAN(TimeZone.getTimeZone("Iran")), - ISRAEL(TimeZone.getTimeZone("Israel")), - IST(TimeZone.getTimeZone("IST")), - JAMAICA(TimeZone.getTimeZone("Jamaica")), - JAPAN(TimeZone.getTimeZone("Japan")), - JST(TimeZone.getTimeZone("JST")), - KWAJALEIN(TimeZone.getTimeZone("Kwajalein")), - LIBYA(TimeZone.getTimeZone("Libya")), - MET(TimeZone.getTimeZone("MET")), - MEXICO_BAJANORTE(TimeZone.getTimeZone("Mexico/BajaNorte")), - MEXICO_BAJASUR(TimeZone.getTimeZone("Mexico/BajaSur")), - MEXICO_GENERAL(TimeZone.getTimeZone("Mexico/General")), - MIDEAST_RIYADH87(TimeZone.getTimeZone("Mideast/Riyadh87")), - MIDEAST_RIYADH88(TimeZone.getTimeZone("Mideast/Riyadh88")), - MIDEAST_RIYADH89(TimeZone.getTimeZone("Mideast/Riyadh89")), - MIT(TimeZone.getTimeZone("MIT")), - MST(TimeZone.getTimeZone("MST")), - MST7MDT(TimeZone.getTimeZone("MST7MDT")), - NAVAJO(TimeZone.getTimeZone("Navajo")), - NET(TimeZone.getTimeZone("NET")), - NST(TimeZone.getTimeZone("NST")), - NZ(TimeZone.getTimeZone("NZ")), - NZ_CHAT(TimeZone.getTimeZone("NZ-CHAT")), - PACIFIC_APIA(TimeZone.getTimeZone("Pacific/Apia")), - PACIFIC_AUCKLAND(TimeZone.getTimeZone("Pacific/Auckland")), - PACIFIC_CHATHAM(TimeZone.getTimeZone("Pacific/Chatham")), - PACIFIC_EASTER(TimeZone.getTimeZone("Pacific/Easter")), - PACIFIC_EFATE(TimeZone.getTimeZone("Pacific/Efate")), - PACIFIC_ENDERBURY(TimeZone.getTimeZone("Pacific/Enderbury")), - PACIFIC_FAKAOFO(TimeZone.getTimeZone("Pacific/Fakaofo")), - PACIFIC_FIJI(TimeZone.getTimeZone("Pacific/Fiji")), - PACIFIC_FUNAFUTI(TimeZone.getTimeZone("Pacific/Funafuti")), - PACIFIC_GALAPAGOS(TimeZone.getTimeZone("Pacific/Galapagos")), - PACIFIC_GAMBIER(TimeZone.getTimeZone("Pacific/Gambier")), - PACIFIC_GUADALCANAL(TimeZone.getTimeZone("Pacific/Guadalcanal")), - PACIFIC_GUAM(TimeZone.getTimeZone("Pacific/Guam")), - PACIFIC_HONOLULU(TimeZone.getTimeZone("Pacific/Honolulu")), - PACIFIC_JOHNSTON(TimeZone.getTimeZone("Pacific/Johnston")), - PACIFIC_KIRITIMATI(TimeZone.getTimeZone("Pacific/Kiritimati")), - PACIFIC_KOSRAE(TimeZone.getTimeZone("Pacific/Kosrae")), - PACIFIC_KWAJALEIN(TimeZone.getTimeZone("Pacific/Kwajalein")), - PACIFIC_MAJURO(TimeZone.getTimeZone("Pacific/Majuro")), - PACIFIC_MARQUESAS(TimeZone.getTimeZone("Pacific/Marquesas")), - PACIFIC_MIDWAY(TimeZone.getTimeZone("Pacific/Midway")), - PACIFIC_NAURU(TimeZone.getTimeZone("Pacific/Nauru")), - PACIFIC_NIUE(TimeZone.getTimeZone("Pacific/Niue")), - PACIFIC_NORFOLK(TimeZone.getTimeZone("Pacific/Norfolk")), - PACIFIC_NOUMEA(TimeZone.getTimeZone("Pacific/Noumea")), - PACIFIC_PAGO_PAGO(TimeZone.getTimeZone("Pacific/Pago_Pago")), - PACIFIC_PALAU(TimeZone.getTimeZone("Pacific/Palau")), - PACIFIC_PITCAIRN(TimeZone.getTimeZone("Pacific/Pitcairn")), - PACIFIC_PONAPE(TimeZone.getTimeZone("Pacific/Ponape")), - PACIFIC_PORT_MORESBY(TimeZone.getTimeZone("Pacific/Port_Moresby")), - PACIFIC_RAROTONGA(TimeZone.getTimeZone("Pacific/Rarotonga")), - PACIFIC_SAIPAN(TimeZone.getTimeZone("Pacific/Saipan")), - PACIFIC_SAMOA(TimeZone.getTimeZone("Pacific/Samoa")), - PACIFIC_TAHITI(TimeZone.getTimeZone("Pacific/Tahiti")), - PACIFIC_TARAWA(TimeZone.getTimeZone("Pacific/Tarawa")), - PACIFIC_TONGATAPU(TimeZone.getTimeZone("Pacific/Tongatapu")), - PACIFIC_TRUK(TimeZone.getTimeZone("Pacific/Truk")), - PACIFIC_WAKE(TimeZone.getTimeZone("Pacific/Wake")), - PACIFIC_WALLIS(TimeZone.getTimeZone("Pacific/Wallis")), - PACIFIC_YAP(TimeZone.getTimeZone("Pacific/Yap")), - PLT(TimeZone.getTimeZone("PLT")), - PNT(TimeZone.getTimeZone("PNT")), - POLAND(TimeZone.getTimeZone("Poland")), - PORTUGAL(TimeZone.getTimeZone("Portugal")), - PRC(TimeZone.getTimeZone("PRC")), - PRT(TimeZone.getTimeZone("PRT")), - PST(TimeZone.getTimeZone("PST")), - PST8PDT(TimeZone.getTimeZone("PST8PDT")), - ROK(TimeZone.getTimeZone("ROK")), - SINGAPORE(TimeZone.getTimeZone("Singapore")), - SST(TimeZone.getTimeZone("SST")), - SYSTEMV_AST4(TimeZone.getTimeZone("SystemV/AST4")), - SYSTEMV_AST4ADT(TimeZone.getTimeZone("SystemV/AST4ADT")), - SYSTEMV_CST6(TimeZone.getTimeZone("SystemV/CST6")), - SYSTEMV_CST6CDT(TimeZone.getTimeZone("SystemV/CST6CDT")), - SYSTEMV_EST5(TimeZone.getTimeZone("SystemV/EST5")), - SYSTEMV_EST5EDT(TimeZone.getTimeZone("SystemV/EST5EDT")), - SYSTEMV_HST10(TimeZone.getTimeZone("SystemV/HST10")), - SYSTEMV_MST7(TimeZone.getTimeZone("SystemV/MST7")), - SYSTEMV_MST7MDT(TimeZone.getTimeZone("SystemV/MST7MDT")), - SYSTEMV_PST8(TimeZone.getTimeZone("SystemV/PST8")), - SYSTEMV_PST8PDT(TimeZone.getTimeZone("SystemV/PST8PDT")), - SYSTEMV_YST9(TimeZone.getTimeZone("SystemV/YST9")), - SYSTEMV_YST9YDT(TimeZone.getTimeZone("SystemV/YST9YDT")), - TURKEY(TimeZone.getTimeZone("Turkey")), - UCT(TimeZone.getTimeZone("UCT")), - UNIVERSAL(TimeZone.getTimeZone("Universal")), - US_ALASKA(TimeZone.getTimeZone("US/Alaska")), - US_ALEUTIAN(TimeZone.getTimeZone("US/Aleutian")), - US_ARIZONA(TimeZone.getTimeZone("US/Arizona")), - US_CENTRAL(TimeZone.getTimeZone("US/Central")), - US_EAST_INDIANA(TimeZone.getTimeZone("US/East-Indiana")), - US_EASTERN(TimeZone.getTimeZone("US/Eastern")), - US_HAWAII(TimeZone.getTimeZone("US/Hawaii")), - US_INDIANA_STARKE(TimeZone.getTimeZone("US/Indiana-Starke")), - US_MICHIGAN(TimeZone.getTimeZone("US/Michigan")), - US_MOUNTAIN(TimeZone.getTimeZone("US/Mountain")), - US_PACIFIC(TimeZone.getTimeZone("US/Pacific")), - US_PACIFIC_NEW(TimeZone.getTimeZone("US/Pacific-New")), - US_SAMOA(TimeZone.getTimeZone("US/Samoa")), - UTC(TimeZone.getTimeZone("UTC")), - VST(TimeZone.getTimeZone("VST")), - W_SU(TimeZone.getTimeZone("W-SU")), - WET(TimeZone.getTimeZone("WET")), - ZULU(TimeZone.getTimeZone("Zulu")); - - private final TimeZone tz; - - private TimeZones(TimeZone tz) { - this.tz = tz; - } - - public final TimeZone getTimeZone() { - return this.tz; - } -} \ No newline at end of file