Метод add(int field,int delta).

Добавляет некоторое смещение к существующей величине поля. В принципе, то же самое можно сделать с помощью set(f, get(f) + delta).

В случае использования метода add следует помнить о двух правилах:

  1. Если величина поля изменения выходит за диапазон возможных значений данного поля, то производится деление по модулю данной величины, частное суммируется со следующим по старшинству полем.
  2. Если изменяется одно из полей, причем, после изменения младшее по отношению к изменяемому полю принимает некорректное значение, то оно изменяется на то, которое максимально близко к "старому".
public class Test { public Test() { } public static void main(String[] args) { SimpleDateFormat sdf = new SimpleDateFormat("yyyy MMMM dd HH:mm:ss"); Calendar cal = Calendar.getInstance(); cal.set(Calendar.YEAR,2002); cal.set(Calendar.MONTH,Calendar.AUGUST); cal.set(Calendar.DAY_OF_MONTH,31); cal.set(Calendar.HOUR_OF_DAY,19); cal.set(Calendar.MINUTE,30); cal.set(Calendar.SECOND,00); System.out.println("Current date: " + sdf.format(cal.getTime())); cal.add(Calendar.SECOND,75); System.out.println("Current date: " + sdf.format(cal.getTime())); cal.add(Calendar.MONTH,1); System.out.println("Current date: " + sdf.format(cal.getTime())); }}

Пример 14.5.

Результатом будет:

Current date: 2002 August 31 19:30:00Current date: 2002 August 31 19:31:15Current date: 2002 September 30 19:31:15

Пример 14.6.

Метод roll(int field,int delta).

Добавляет некоторое смещение к существующей величине поля и не производит изменения старших полей. Рассмотрим приведенный ранее пример, но с использованием метода roll.

public class Test { public Test() { } public static void main(String[] args) { SimpleDateFormat sdf = new SimpleDateFormat("yyyy MMMM dd HH:mm:ss"); Calendar cal = Calendar.getInstance(); cal.set(Calendar.YEAR,2002); cal.set(Calendar.MONTH,Calendar.AUGUST); cal.set(Calendar.DAY_OF_MONTH,31); cal.set(Calendar.HOUR_OF_DAY,19); cal.set(Calendar.MINUTE,30); cal.set(Calendar.SECOND,00); System.out.println("Current date: " + sdf.format(cal.getTime())); cal.roll(Calendar.SECOND,75); System.out.println("Rule 1: " + sdf.format(cal.getTime())); cal.roll(Calendar.MONTH,1); System.out.println("Rule 2: " + sdf.format(cal.getTime())); }}

Пример 14.7.

Результатом будет:

Current date: 2002 August 31 19:30:00Rule 1: 2002 August 31 19:30:15Rule 2: 2002 September 30 19:30:15

Пример 14.8.

Как видно из результатов работы приведенного выше кода, действие правила 1 изменилось по сравнению с методом add, а правило 2 действует так же.

Класс TimeZone

Класс TimeZone предназначен для совместного использования с классами Calendar и DateFormat. Класс абстрактный, поэтому от него порождать объекты нельзя. Вместо этого определен статический метод getDefault(), который возвращает экземпляр наследника TimeZone с настройками, взятыми из операционной системы, под управлением которой работает JVM. Для того, чтобы указать произвольные параметры, можно воспользоваться статическим методом getTimeZone(String ID), в качестве параметра которому передается наименование конкретного временного пояса, для которого необходимо получить объект TimeZone. Набор полей, определяющих возможный набор параметров для getTimeZone, нигде явно не описывается. Вместо этого определен статический метод String[] getAvailableIds(), который возвращает возможные значения для параметра getTimeZone. Так можно определить набор возможных параметров для конкретного временного пояса (рассчитывается относительно Гринвича) String[] getAvailableIds(int offset).

Рассмотрим пример, в котором на консоль последовательно выводятся:

  • временная зона по умолчанию;
  • список всех возможных временных зон;
  • список временных зон, которые совпадают с текущей временной зоной.
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 * 60 * 60 ) + ")"); } // Display all available TimeZones same as for Moscow System.out.println("\n\n TimeZones same as for Moscow \n"); idArr = tz.getAvailableIDs(rawOffset); 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 * 60 * 60 ) + ")"); } } String padr(String str,int len){ if(len - str.length() > 0){ char[] buf = new char[len - str.length()]; Arrays.fill(buf,' '); return str + new String(buf); }else{ return str.substring(0,len); } }}

Пример 14.9.

Результатом будет:

Current TimeZone Moscow Standard TimeEurope/MoscowTimeZones 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.








Дата добавления: 2016-03-22; просмотров: 802;


Поиск по сайту:

При помощи поиска вы сможете найти нужную вам информацию.

Поделитесь с друзьями:

Если вам перенёс пользу информационный материал, или помог в учебе – поделитесь этим сайтом с друзьями и знакомыми.
helpiks.org - Хелпикс.Орг - 2014-2024 год. Материал сайта представляется для ознакомительного и учебного использования. | Поддержка
Генерация страницы за: 0.005 сек.