1
0
mirror of https://github.com/NekoX-Dev/NekoX.git synced 2024-12-13 01:49:41 +01:00

Add persian calendar. close #116 #448

This commit is contained in:
herotux 2021-04-01 08:48:10 +08:00 committed by 世界
parent 3b39eed879
commit 53bc1b0bbe
No known key found for this signature in database
GPG Key ID: CD109927C34A63C4
10 changed files with 948 additions and 13 deletions

View File

@ -45,6 +45,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.utils.FileUtil;
public class LocaleController {
@ -1420,10 +1421,23 @@ public class LocaleController {
date *= 1000;
calendar.setTimeInMillis(date);
if (checkYear && currentYear == calendar.get(Calendar.YEAR) || !checkYear && Math.abs(System.currentTimeMillis() - date) < 31536000000L) {
return getInstance().chatDate.format(date);
PersianCalendar persianCalendar = null;
if (NekoConfig.usePersianCalender) {
persianCalendar = new PersianCalendar(date);
}
if (checkYear && currentYear == calendar.get(Calendar.YEAR) || !checkYear && Math.abs(System.currentTimeMillis() - date) < 31536000000L) {
if (NekoConfig.usePersianCalender) {
return persianCalendar.getPersianMonthDay();
} else {
return getInstance().chatDate.format(date);
}
} else {
if (NekoConfig.usePersianCalender) {
return persianCalendar.getPersianYear() + "" + persianCalendar.getPersianMonthDay();
} else {
return getInstance().chatFullDate.format(date);
}
}
return getInstance().chatFullDate.format(date);
} catch (Exception e) {
FileLog.e(e);
}
@ -1493,15 +1507,27 @@ public class LocaleController {
rightNow.setTimeInMillis(date);
int dateDay = rightNow.get(Calendar.DAY_OF_YEAR);
int dateYear = rightNow.get(Calendar.YEAR);
PersianCalendar persianCalendar = null;
if (NekoConfig.usePersianCalender) {
persianCalendar = new PersianCalendar(date);
}
if (dateDay == day && year == dateYear) {
return getInstance().formatterDay.format(new Date(date));
} else if (dateDay + 1 == day && year == dateYear) {
return LocaleController.formatString("YesterdayAtFormatted", R.string.YesterdayAtFormatted, getInstance().formatterDay.format(new Date(date)));
} else if (Math.abs(System.currentTimeMillis() - date) < 31536000000L) {
return LocaleController.formatString("formatDateAtTime", R.string.formatDateAtTime, getInstance().chatDate.format(new Date(date)), getInstance().formatterDay.format(new Date(date)));
if (NekoConfig.usePersianCalender) {
return LocaleController.formatString("formatDateAtTime", R.string.formatDateAtTime, persianCalendar.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 {
return LocaleController.formatString("formatDateAtTime", R.string.formatDateAtTime, getInstance().chatFullDate.format(new Date(date)), getInstance().formatterDay.format(new Date(date)));
if (NekoConfig.usePersianCalender) {
return LocaleController.formatString("formatDateAtTime", R.string.formatDateAtTime, persianCalendar.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)));
}
}
} catch (Exception e) {
FileLog.e(e);
@ -1567,6 +1593,10 @@ public class LocaleController {
rightNow.setTimeInMillis(date);
int dateDay = rightNow.get(Calendar.DAY_OF_YEAR);
int dateYear = rightNow.get(Calendar.YEAR);
PersianCalendar persianCalendar = null;
if (NekoConfig.usePersianCalender) {
persianCalendar = new PersianCalendar(date);
}
if (dateDay == day && year == dateYear) {
return LocaleController.formatString("LastSeenFormatted", R.string.LastSeenFormatted, LocaleController.formatString("TodayAtFormatted", R.string.TodayAtFormatted, getInstance().formatterDay.format(new Date(date))));
@ -1581,11 +1611,21 @@ public class LocaleController {
} else if (dateDay + 1 == day && year == dateYear) {
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) {
String format = LocaleController.formatString("formatDateAtTime", R.string.formatDateAtTime, getInstance().formatterDayMonth.format(new Date(date)), getInstance().formatterDay.format(new Date(date)));
return LocaleController.formatString("LastSeenDateFormatted", R.string.LastSeenDateFormatted, format);
if (NekoConfig.usePersianCalender) {
String format = LocaleController.formatString("formatDateAtTime", R.string.formatDateAtTime, persianCalendar.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)));
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)));
return LocaleController.formatString("LastSeenDateFormatted", R.string.LastSeenDateFormatted, format);
if (NekoConfig.usePersianCalender) {
String format = LocaleController.formatString("formatDateAtTime", R.string.formatDateAtTime, persianCalendar.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)));
return LocaleController.formatString("LastSeenDateFormatted", R.string.LastSeenDateFormatted, format);
}
}
} catch (Exception e) {
FileLog.e(e);
@ -1716,6 +1756,8 @@ public class LocaleController {
return getInstance().formatterDay.format(new Date(date));
} else if (dayDiff > -7 && dayDiff <= -1) {
return getInstance().formatterWeek.format(new Date(date));
} else if (NekoConfig.usePersianCalender) {
return new PersianCalendar(date).getPersianMonthDay();
} else {
return getInstance().formatterDayMonth.format(new Date(date));
}

View File

@ -119,6 +119,7 @@ public class NekoConfig {
public static boolean mediaPreview;
public static boolean proxyAutoSwitch;
public static boolean usePersianCalender;
public static String openPGPApp;
public static long openPGPKeyId;
@ -278,7 +279,7 @@ public class NekoConfig {
mediaPreview = preferences.getBoolean("mediaPreview", true);
proxyAutoSwitch = preferences.getBoolean("proxy_auto_switch", false);
//preferences.getBoolean("usePersianCalender", false);
usePersianCalender = preferences.getBoolean("usePersianCalender", false);
openPGPApp = preferences.getString("openPGPApp", "");
openPGPKeyId = preferences.getLong("openPGPKeyId", 0L);
@ -689,6 +690,10 @@ public class NekoConfig {
preferences.edit().putBoolean("proxy_auto_switch", proxyAutoSwitch = !proxyAutoSwitch).apply();
}
public static void toggleUsePersianCalender() {
preferences.edit().putBoolean("usePersianCalender", usePersianCalender = !usePersianCalender).apply();
}
public static void setOpenPGPApp(String packageName) {
preferences.edit().putString("openPGPApp", openPGPApp = packageName).apply();
}

View File

@ -481,10 +481,10 @@ public class NekoGeneralSettingsActivity extends BaseFragment {
ActionBarLayout.headerShadowDrawable = NekoConfig.disableAppBarShadow ? null : parentLayout.getResources().getDrawable(R.drawable.header_shadow).mutate();
parentLayout.rebuildAllFragmentViews(true, true);
} else if (position == usePersianCalenderRow) {
/* NekoConfig.toggleUsePersianCalender();
NekoConfig.toggleUsePersianCalender();
if (view instanceof TextCheckCell) {
((TextCheckCell) view).setChecked(NekoConfig.usePersianCalender);
}*/
}
} else if (position == pgpAppRow) {
PopupBuilder builder = new PopupBuilder(view);
@ -774,7 +774,7 @@ public class NekoGeneralSettingsActivity extends BaseFragment {
disableNumberRoundingRow = rowCount++;
openArchiveOnPullRow = rowCount++;
nameOrderRow = rowCount++;
usePersianCalenderRow = -1;
usePersianCalenderRow = rowCount ++;
general2Row = rowCount++;
if (notify && listAdapter != null) {
@ -978,6 +978,7 @@ public class NekoGeneralSettingsActivity extends BaseFragment {
} else if (position == appBarShadowRow) {
textCell.setTextAndCheck(LocaleController.getString("DisableAppBarShadow", R.string.DisableAppBarShadow), NekoConfig.disableAppBarShadow, true);
} else if (position == usePersianCalenderRow) {
textCell.setTextAndValueAndCheck(LocaleController.getString("UsePersianCalender", R.string.UsePersianCalender), LocaleController.getString("UsePersianCalenderInfo", R.string.UsePersianCalenderInfo), NekoConfig.usePersianCalender, true, true);
} else if (position == autoPauseVideoRow) {
textCell.setTextAndValueAndCheck(LocaleController.getString("AutoPauseVideo", R.string.AutoPauseVideo), LocaleController.getString("AutoPauseVideoAbout", R.string.AutoPauseVideoAbout), NekoConfig.autoPauseVideo, true, true);
} else if (position == acceptSecretChatRow) {

View File

@ -0,0 +1,27 @@
package tw.nekomimi.nekogram.shamsicalendar;
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", "۹");
}
public static String[] getPersianNumbers(String[] strings) {
for (int i = 0; i < strings.length; i++) {
strings[i] = getPersianNumbers(strings[i]);
}
return strings;
}
public static ArrayList<String> getPersianNumbers(ArrayList<String> strings) {
for (int i = 0; i < strings.size(); i++) {
strings.set(i, getPersianNumbers((String) strings.get(i)));
}
return strings;
}
public static String getLatinNumbers(String string) {
return string.replace("۰", "0").replace("١", "1").replace("۲", "2").replace("۳", "3").replace("۴", "4").replace("۵", "5").replace("۶", "6").replace("۷", "7").replace("۸", "8").replace("۹", "9");
}
}

View File

@ -0,0 +1,174 @@
package tw.nekomimi.nekogram.shamsicalendar;
import java.util.GregorianCalendar;
import java.util.TimeZone;
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 int getPersianMonth() {
return this.persianMonth;
}
public String getPersianMonthName() {
return PersianCalendarConstants.persianMonthNames[this.persianMonth];
}
public int getPersianDay() {
return this.persianDay;
}
public String getPersianDayfanum() {
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() + " " + getPersianDayfanum() + " " + getPersianMonthName() + " " + this.persianYear;
}
public String getPersianNormalDate() {
return getPersianDayfanum() + " " + getPersianMonthName() + " " + getPersianDayfanum();
}
//like 9 شهریور
public String getPersianMonthDay() {
return getPersianDayfanum() + " " + 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();
}
}

View File

@ -0,0 +1,9 @@
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[] persianWeekDays = new String[]{"شنبه", "یک‌شنبه", "دوشنبه", "سه‌شنبه", "چهارشنبه", "پنج‌شنبه", "جمعه"};
}

View File

@ -0,0 +1,24 @@
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));
}
}

View File

@ -0,0 +1,76 @@
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;
}
}

View File

@ -0,0 +1,575 @@
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;
}
}

View File

@ -225,4 +225,6 @@
<string name="UnpinSticker">Unpin</string>
<string name="SetPinnedSuffix">(Pinned)</string>
<string name="AppLinkFDroid">F-Droid</string>
<string name="UsePersianCalender">Use persian calender</string>
<string name="UsePersianCalenderInfo">Display date with Solar Hijri calendar</string>
</resources>