1. Введение в часовой пояс
Временный пост представляет собой смещение часового пояса, а также может рассчитать время экономии дневного света.
Часовой застрой часто используется при эксплуатационных объектах, представляющих даты/время, такие как дата, календарь и т. Д.; Потому что разные часовые пояса имеют разные времена.
Давайте поговорим о двух распространенных способах создания объектов часового пояса.
1. Получите объект часового пояса по умолчанию
Как использовать:
Timezone tz = Timezone.getDefault ()
2. Используйте метод GetTimeZone (идентификатор строки), чтобы получить объект часового пояса
Как использовать:
// Получить часовой пояс, соответствующий "GMT+08: 00" TimeZone China = Timezone.getTimeZone ("Gmt+: 08: 00"); // Получить часовой пояс, соответствующий "China/Chongzing" Timezone Chongqing = Timezone.getTimezone ("Asia/Chongqing"); Для значений всех параметров идентификатора, поддерживаемых GetTimeZone (идентификатор строки), вы можете найти их следующими способами:
String [] ids = timezone.getavailableids (); для (String Id: ids) System.out.printf (id+",");
Результат вывода:
И т. Д./GMT+12 и т. Д./GMT+11, Pacific/Midway, Pacific/Niue ... и т. Д.Например, создайте часовой пояс, соответствующий второму значению печати «и т. Д./GMT+11» выше. Метод заключается в следующем:
Timezone TZ = Timezone.getTimeZone ("и т. Д./GMT+11"); интерфейс функции TimeZone // Конструктор Часовой застрой ():Object Clone () Синхронизированная статическая строка [] getaVailableIds () Синхронизированная статическая строка [] getaVailableids (int offsetMillis) int getDStSavings () Синхронизированный статический часовой чар getDisplayName(boolean daylightTime, int style)String getID()abstract int getOffset(int era, int year, int month, int day, int dayOfWeek, int timeOfDayMillis)int getOffset(long time)abstract int getRawOffset()synchronized static TimeZone getTimeZone(String id)boolean hasSameRules(TimeZone timeZone)abstract boolean inDaylightTime(Date Время) Синхронизированный статический void setDefault (часовая часовая часа) void setId (string id) Аннотация void setRawOffset (int offsetmillis) Abstract Boolean usnaylighttime ()
2. Пример часового пояса:
Ниже приведен пример для демонстрации использования часового пояса в дате.
Справочный код заключается в следующем (Timezonetest.java):
Import java.text.dateformat; import java.util.date; import java.util.timezone;/*** Программа испытаний Timezone*/public Class Timezonetest {public static void main (string [] args) {// test 3 методы создания Timezone ObjectOftimezones ();); // проверить другие API -интерфейсы TimeZone Testotherapis (); // распечатать все идентификаторы, поддерживаемые GetTimeZone (String Id) // printalltimezones (); } / *** Тест 3 Методы создания объектов часового пояса* / public static void showusAgeoftimezones () {timezone tz; // (01) Часовой пояс по умолчанию TZ = Timezone.getDefault (); printdatein (tz); // (02) Установите часовой пояс на "GMT+08: 00" TZ = TimeZone.GetTimeZone ("GMT+08: 00"); printdatein (tz); // (03) Установите часовой пояс на "" tz = timezone.gettimezone ("Asia/Chongqing"); printdatein (tz); }/*** Распечатать дату/время, соответствующее TZ*/Private Static void printDatein (Timezone TZ) {// Дата-2013-09-19 14:22:30 Дата = новая дата (113, 8, 19, 14, 22, 30); // Получить дату по умолчанию для форматирования DateFormat df = dateFormat.getInstance (); // Установить часовой пояс на TZ DF.SetTimeZone (TZ); // Получить форматированную строку string str = df.format (date); System.out.println (tz.getid ()+":"+str); } / ** * ТЕСТАЯ ТЕПТИЧЕСКИЕ АПИС * / Public Static void testotherapis () {// Часовой пояс по умолчанию TUMEZONE TZ = Timezone.getDefault (); // Получить "ID" String ID = tz.getId (); // Получить "отображение имени" string name = tz.getDisplayName (); // Получить «смещение времени». Смещение относительно «первичного меридиана» - MS. int offset = tz.getRawoffset (); // Получить соответствующий час «смещения времени» int gmt = offset/(3600*1000); System.out.printf ("id =%s, name =%s, offset =%s (ms), gmt =%s/n", id, name, offset, gmt); } / ** * Распечатать все идентификаторы, поддерживаемые getTimeZone (String Id) * / public static void printalltimezones () {string [] ids = timezone.getavailableids (); for (String id: ids) {// int offset = timezone.gettimezone (avaids [i]). getRawOffset (); //System.out.println(i+ ""+avaids [i]+""+смещение/(3600 * 1000)+"/t"); System.out.printf (id+","); } System.out.println (); }}
3. о часовой калибровке и временем
Java и Solaris очень похожи, когда дело доходит до информации о часовых поясах. Каждый часовой пояс имеет идентификатор идентификатора часового пояса. В J2SE 1.3 и 1.4 этот идентификатор представляет собой строку, которая представляет собой список этих идентификаторов, расположенных в подкаталоге JRE/LIB установщика J2SE. J2SE 1.3 содержит файлы TZMappings, но J2SE 1.4 содержит файлы данных часового пояса в разных регионах мира. JRE/LIB/ZI хранит эти файлы. В J2SE 1.4, Sun.Util.Calendar.Zoneinfo получает DST -правила из этих файлов. В Solaris эти файлы данных часового пояса хранятся в двоичной форме и не являются текстовыми файлами, поэтому вы не можете смотреть на них. Файл данных часового пояса в J2SE 1.4 отличается от того, что в Solaris.
Исходный код метода getDefault в классе java.util.timezone показывает, что в конечном итоге он будет вызвать метод gettimezone в классе Sun.util.calendar.zoneinfo. Этот метод возвращает параметр строки в качестве идентификатора для требуемой области времени. Этот идентификатор часового пояса по умолчанию получается от свойства user.timezone (система). Если user.timezone не определен, он попытается получить идентификатор от свойств user.country и java.home (система). Если он не успешно найдет идентификатор часового пояса, он использует значение GMT «запасной». Другими словами, если он не рассчитывает ваш идентификатор часового пояса, он будет использовать GMT в качестве часового пояса по умолчанию.
Обратите внимание, что свойство системы инициализируется в методе инициаторов класса java.lang.system. Это локальный метод. Поэтому исходный код недоступен, если вы не выпадаете в локальную базу кода в пакете дистрибуции J2SE для изучения. Однако в системах Windows атрибут системы инициализируется из реестра Windows, в то время как в Linux/Unix он инициализируется переменными среды. Декларация Javadoc метода initProperties, определенные свойства «должны быть определены» и перечислили их. Из трех свойств системы, используемых методом GetDefault в классе java.util.timezone, только Java.home указан в Javadoc как «гарантированное» свойство.
Рекомендуемые решения:
Итак, как вы убедитесь, что Java дает вам подходящее время и дату? Лучший способ - подтвердить, что класс временного пояса по умолчанию виртуальной машины Java (JVM) является правильным и подходит для вашей географической сферы (Locale). Как вы убедитесь, что временный пояс по умолчанию правильный и подходящий? Это еще одна новая проблема. Как и большинство проблем, у этого есть много решений. Согласно исходному коду метода java.util.timezone.getDefault, лучший способ - правильно установить свойство user.timezone. При запуске виртуальной машины Java вы можете легко переопределить значение, установленное в методе java.lang.system.initproperties, с помощью параметра командной строки -d. Например:
java -duser.timezone = Asia/Shanghai Datetest
Эта команда запускает класс DateTay и устанавливает свойство user.timezone в Азию/Шанхай. Вы также можете установить свойство user.timezone, используя метод SetProperty в классе java.lang.system:
System.SetProperty ("user.Timezone", "Asia/Shanghai");Если для вас нет доступного идентификатора часового пояса, вы можете создать пользовательский часовой пояс, используя метод SetDefault в классе java.util.timezone, чтобы установить его на время по умолчанию zone-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Помните, что в J2SE большинство классов, связанных с датой и временем, содержат информацию о часовых поясах, включая те классы форматов, такие как Java.Text.Dateformat, поэтому все они влияют на часовой пояс по умолчанию JVM. Однако, когда вы создаете экземпляры этих классов, вы можете обеспечить правильную информацию о часовом поясе для них, что облегчает вам установку часового пояса по умолчанию всего JVM. И после настройки вы можете убедиться, что все эти классы будут использовать один и тот же часовой пояс по умолчанию.