Чтение онлайн

на главную - закладки

Жанры

Программирование на Java
Шрифт:

Рассмотрим подробнее порядок выполнения перечисленных методов.

Метод set(int field,int value).

Как уже говорилось, данный метод производит установку какого-либо поля даты. На самом деле после вызова этого метода немедленного пересчета даты не производится. Пересчет даты будет осуществлен только после вызова методов get, getTime или getTimeInMillis. Таким образом, последовательная установка нескольких полей не вызовет ненужных вычислений. Помимо этого, появляется еще один интересный эффект. Рассмотрим следующий

пример. Предположим, что дата установлена на последний день августа. Необходимо перевести ее на последний день сентября. Если бы внутреннее представление даты изменялось после вызова метода set, то при последовательной установке полей мы получили бы вот такой эффект:

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);

System.out.println(" Initialy set date: " + sdf.format(cal.getTime));

cal.set(Calendar.MONTH,Calendar.SEPTEMBER);

System.out.println(" Date with month changed : " + sdf.format(cal.getTime));

cal.set(Calendar.DAY_OF_MONTH,30);

System.out.println(" Date with day changed : " + sdf.format(cal.getTime));

}

}

Пример 14.1.

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

Initialy set date: 2002 August 31 22:57:47

Date with month changed : 2002 October 01 22:57:47

Date with day changed : 2002 October 30 22:57:47

Пример 14.2.

Как мы видим, в данном примере при изменении месяца день месяца остался неизменным и было унаследовано его предыдущее значение. Но поскольку в сентябре 30 дней, дата автоматически была переведена на 1 октября, и когда было бы установлено 30 число, оно относилось бы уже к октябрю. В следующем примере считывание даты не производится, соответственно, ее вычисление не выполняется до тех пор, пока все поля не установлены:

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);

System.out.println(" Initialy set date: " + sdf.format(cal.getTime));

cal.set(Calendar.MONTH,Calendar.SEPTEMBER);

cal.set(Calendar.DAY_OF_MONTH,30);

System.out.println(" Date with day and month changed : " + sdf.format(cal.getTime));

}

}

Пример 14.3.

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

Initialy set date: 2002 August 31 23:03:51

Date with day and month changed: 2002 September 30 23:03:51

Пример 14.4.

Метод 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:00

Current date: 2002 August 31 19:31:15

Current 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));

Поделиться:
Популярные книги

Кротовский, сколько можно?

Парсиев Дмитрий
5. РОС: Изнанка Империи
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Кротовский, сколько можно?

Законы Рода. Том 3

Flow Ascold
3. Граф Берестьев
Фантастика:
фэнтези
аниме
5.00
рейтинг книги
Законы Рода. Том 3

Сколько стоит любовь

Завгородняя Анна Александровна
Любовные романы:
любовно-фантастические романы
6.22
рейтинг книги
Сколько стоит любовь

Неудержимый. Книга XIII

Боярский Андрей
13. Неудержимый
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Неудержимый. Книга XIII

Душелов. Том 4

Faded Emory
4. Внутренние демоны
Фантастика:
юмористическая фантастика
ранобэ
фэнтези
фантастика: прочее
хентай
эпическая фантастика
5.00
рейтинг книги
Душелов. Том 4

Неудержимый. Книга IV

Боярский Андрей
4. Неудержимый
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Неудержимый. Книга IV

Газлайтер. Том 12

Володин Григорий Григорьевич
12. История Телепата
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Газлайтер. Том 12

Мастер темных Арканов

Карелин Сергей Витальевич
1. Мастер темных арканов
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Мастер темных Арканов

Купи мне маму!

Ильина Настя
Любовные романы:
современные любовные романы
5.00
рейтинг книги
Купи мне маму!

Черный Маг Императора 6

Герда Александр
6. Черный маг императора
Фантастика:
юмористическое фэнтези
попаданцы
аниме
7.00
рейтинг книги
Черный Маг Императора 6

Кодекс Охотника. Книга VII

Винокуров Юрий
7. Кодекс Охотника
Фантастика:
фэнтези
попаданцы
аниме
4.75
рейтинг книги
Кодекс Охотника. Книга VII

На границе империй. Том 8

INDIGO
12. Фортуна дама переменчивая
Фантастика:
космическая фантастика
попаданцы
5.00
рейтинг книги
На границе империй. Том 8

Искушение генерала драконов

Лунёва Мария
2. Генералы драконов
Любовные романы:
любовно-фантастические романы
5.00
рейтинг книги
Искушение генерала драконов

Неудержимый. Книга XVIII

Боярский Андрей
18. Неудержимый
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Неудержимый. Книга XVIII