public class Test {
public Test() {
}
public static void main(String[] args) {
Test test = new Test();
TimeZone tz = TimeZone.getDefault();
int rawOffset = tz.getRawOffset();
System.out.println("Current TimeZone" + tz.getDisplayName() + tz.getID() + "\n\n");
// Display all available TimeZones
System.out.println("All Available TimeZones \n");
String[] idArr = tz.getAvailableIDs();
for(int cnt=0;cnt < idArr.length;cnt++){
tz = TimeZone.getTimeZone(idArr[cnt]);
System.out.println(test.padr(tz.getDisplayName() +
tz.getID(),64) + " raw offset=" + tz.getRawOffset() +
";hour offset=(" + tz.getRawOffset()/ (1000
Результатом будет:
Current TimeZone Moscow Standard TimeEurope/Moscow TimeZones same as for Moscow Eastern African TimeAfrica/Addis_Aba raw offset=10800000;hour offset=(3) Eastern African TimeAfrica/Asmera raw offset=10800000;hour offset=(3) Eastern African TimeAfrica/Dar_es_Sa raw offset=10800000;hour offset=(3) Eastern African TimeAfrica/Djibouti raw offset=10800000;hour offset=(3) Eastern African TimeAfrica/Kampala raw offset=10800000;hour offset=(3) Eastern African TimeAfrica/Khartoum raw offset=10800000;hour offset=(3) Eastern African TimeAfrica/Mogadishu raw offset=10800000;hour offset=(3) Eastern African TimeAfrica/Nairobi raw offset=10800000;hour offset=(3) Arabia Standard TimeAsia/Aden raw offset=10800000;hour offset=(3) Arabia Standard TimeAsia/Baghdad raw offset=10800000;hour offset=(3) Arabia Standard TimeAsia/Bahrain raw offset=10800000;hour offset=(3) Arabia Standard TimeAsia/Kuwait raw offset=10800000;hour offset=(3) Arabia Standard TimeAsia/Qatar raw offset=10800000;hour offset=(3) Arabia Standard TimeAsia/Riyadh raw offset=10800000;hour offset=(3) Eastern African TimeEAT raw offset=10800000;hour offset=(3) Moscow Standard TimeEurope/Moscow raw offset=10800000;hour offset=(3) Eastern African TimeIndian/Antananar raw offset=10800000;hour offset=(3) Eastern African TimeIndian/Comoro raw offset=10800000;hour offset=(3) Eastern African TimeIndian/Mayotte raw offset=10800000;hour offset=(3) Пример 14.10.
Класс SimpleTimeZone
Класс SimpleTimeZone, как потомок TimeZone, реализует его абстрактные методы и предназначен для применения в настройках, использующих Григорианский календарь. В большинстве случаев нет необходимости создавать экземпляр данного класса с помощью конструктора. Вместо этого лучше использовать статические методы, которые возвращают тип TimeZone, рассмотренные в предыдущем параграфе. Единственная, пожалуй, причина для использования конструктора - необходимость задания нестандартных правил перехода на зимнее и летнее время.
В классе SimpleTimeZone определено три конструктора. Рассмотрим наиболее полный с точки зрения функциональности вариант, который, помимо временной зоны, задает летнее и зимнее время.
public SimpleTimeZone(int rawOffset, String ID, int startMonth, int startDay, int startDayOfWeek, int startTime, int endMonth, int endDay, int endDayOfWeek, int endTime)
rawOffset - временное смещение относительно гринвича;
ID - идентификатор временной зоны (см. пред.параграф);
startMonth - месяц перехода на летнее время;
startDay - день месяца перехода на летнее время*;
startDayOfWeek - день недели перехода на летнее время*;
startTime - время перехода на летнее время (указывается в миллисекундах);
endMonth - месяц окончания действия летнего времени;
endDay - день окончания действия летнего времени*;
endDayOfWeek - день недели окончания действия летнего времени*;
endTime - время окончания действия летнего времени (указывается в миллисекундах).
Перевод часов на зимний и летний вариант исчисления времени определяется специальным правительственным указом. Обычно переход на летнее время происходит в 2 часа в последнее воскресенье марта, а переход на зимнее время - в 3 часа в последнее воскресенье октября.
Алгоритм расчета таков:
если startDay=1 и установлен день недели, то будет вычисляться первый день недели startDayOfWeek месяца startMonth (например, первое воскресенье);