Классы Date, Calendar, DateFormat
Класс Date предназначен для работы с текущими датой и временем и позволяет отталкиваться от них для решения своих задач. При выходе новых версий Java часть методов класса была перемещена в классы Calendar и DateFormat.
При импорте выбирайте java.util.Date, а не java.sql.Date.
У класса есть два конструктора:
Первый конструктор без параметров инициализирует объект текущей датой и временем. Во втором конструкторе вы можете указать количество миллисекунд, прошедших с полуночи 1 января 1970 года.
Если вы посмотрите документацию, то увидите, что существует множество методов для получения или установки отдельных компонентов времени и даты, например, getMinutes()/setMinutes() и др. Все они являются устаревшими и вместо них следует использовать класс Calendar.
Простой пример вывода даты на экран.
С помощью метода getTime() можно отобразить количество миллисекунд, прошедших с 1 января 1970 года. Обновим пример
Calendar
У класса много методов. Вкратце опишем часть из них:
Также в календаре определены много различных констант: AUGUST и другие месяцы, SATURDAY и другие дни недели, HOUR и т.д.
GregorianCalendar
Класс GregorianCalendar является подклассом Calendar, который представляет обычный Григорианский календарь. Метод getInstance() класса Calendar обычно возвращает объект класса GregorianCalendar, инициированный текущей датой и временем согласно региональным настройкам.
Кроме стандартных методов, которые есть в классе Calendar, у GregorianCalendar есть метод isLeapYear() для проверки високосного года.
Если год високосный, то возвращается true.
Отсчёт месяцев идёт от нуля, поэтому декабрь будет одиннадцатым месяцем. Чтобы не путаться с такими случаями, проще использовать понятные константы:
А получать нужные отрезки времени можно через метод get(). Например, узнать, какой месяц содержится в созданной нами дате можно так:
Изменить состояние объекта можно через метод set(). Например, установим новую дату у нашего объекта.
Можно сдвинуть дату на определённый период с помощью метода add(). Отодвинем дату на два месяца.
Методы getTime() и setTime() работают с объектами Date и полезны для преобразования.
TimeZone
Класс TimeZone позволяет работать с часовыми поясами, смещёнными относительно Гринвича, также известного универсальное глобальное время (UTC). Класс также учитывает летнее время.
SimpleTimeZone
Класс DateFormat
Класс DateFormat является абстрактным классом, с помощью которого можно форматировать и анализировать показания даты и времени. метод getDateInstance() возвращает экземпляр класса DateFormat, который может форматировать информацию о дате.
Чаще всего используется метод format(), позволяющий вывести дату в нужном формате.
Класс SimpleDateFormat
Класс SimpleDateFormat является подклассом класса DateFormat и позволяет определять собственные шаблоны форматирования для отображения даты и времени.
Символы форматирования строки
Количество повторений символа определяет способ представления даты. Например, можно указать hh:mm:ss, а можно h:m:s. В первом случае будет отображаться ноль перед цифрой.
Примеры работы с датами и временем можно найти в статье на эту тему.
Классы Date, Calendar, TimeZone
Для удобной работы с датой и временем в Java используются классы Date и Calendar. Оба класса находятся в библиотеке java.util. Класс TimeZone используется совместно с классами Calendar и DateFormat
Класс SimpleDateFormat является подклассом класса DateFormat и позволяет определять собственные шаблоны форматирования для отображения даты и времени.
На странице рассмотрены следующие классы :
Класс Date
Класс Date хранит время в миллисекундах начиная с 1 января 1970 года. Данный класс имеет конструктор по умолчанию, который возвращает текущее время. Кроме этого можно создать объект Date используя конструктор, который принимает количество миллисекунд начиная с 1 января 1970 года. Для получения этого внутреннего времени используется метод getTime(). Кроме этого уже после создания экземпляра класса можно изменить время с помощью setTime(long date).
Конструкторы класса Date :
Первый конструктор без параметров инициализирует объект текущей датой и временем. Во втором конструкторе можно указать количество миллисекунд, прошедших с полуночи 1 января 1970 года.
Методы класса Date:
Простой пример использования Date для вывода даты в консоль.
С помощью метода getTime() можно отобразить количество миллисекунд, прошедших с 1 января 1970 года.
Класс SimpleDateFormat
Для того, чтобы отображать дату и время в удобном формате можно использовать класс SimpleDataFormat :
При создании шаблона представления даты SimpleDateFormat использовались следующие параметры :
В качестве разделитель можно использовать любой текст.
Класс SimpleDateFormat является подклассом класса DateFormat и позволяет определять собственные шаблоны форматирования для отображения даты и времени.
Символы форматирования строки
Количество повторений символа определяет способ представления даты. Например, можно указать hh:mm:ss, а можно h:m:s. В первом случае при необходимости для чисел 0..9 будет отображаться ноль перед цифрой.
Класс Calendar
В документации представлено множество методов для получения или установки отдельных компонентов времени и даты, например, getMinutes()/setMinutes() и др. Все они являются устаревшими и вместо них следует использовать класс Calendar.
Пример использования классов Calendar и GregorianCalendar
Поля класса Calendar
Методы класса Calendar
| Наименование | Описание |
|---|---|
| abstract void add(int field, int value) | добавляет value к компоненту времени или даты, указанному в параметре field (например, Calendar.HOUR). Чтобы отнять, используйте отрицательное значение. |
| boolean after(Object calendar) | возвращает значение true, если вызывающий объект класса Calendar содержит более позднюю дату, чем calendar. |
| boolean before(Object calendar) | возвращает значение true, если вызывающий объект класса Calendar содержит более раннюю дату, чем calendar. |
| final void clear() | обнуляет все компоненты времени в вызывающем объекте. |
| final void clear(int field) | обнуляет компонент, указанный в параметре field |
| int get(int field) | возвращает значение одного компонента, например, Calendar.MINUTE |
| synchronized static Locale[] getAvailableLocales() | возвращает массив объектов класса Locale, содержащий региональные данные |
| synchronized static Calendar getInstance() | возвращает объект класса Calendar для региональных данных и часового пояса по умолчанию. Есть и другие перегруженные версии. |
| final Date getTime() | возвращает объекта класса Date, содержащий время, эквивалентное вызывающему объекту. |
| TimeZone getTimeZone() | возвращает часовой пояс |
| final boolean isSet(int field) | возвращает значение true, если указанный компонент времени указан. |
| void set(int field, int value) | устанавливает компоненты даты или времени. Есть перегруженные версии. |
| final void setTime(Date date) | устанавливает различные компоненты даты и времени через объект класса Date. |
| void setTimeZone(TimeZone timezone) | устанавливает часовой пояс через объект класса TimeZone. |
Календарь достаточно мощный класс, который позволяет получать названия месяцев и дней недели, увеличивать или уменьшать различные параметры текущей даты, а также получать их. Для удобства работы с ним нужно просто разобраться с типами данных, с которыми он работает:
Пример Calendar, GregorianCalendar
Класс GregorianCalendar
Класс GregorianCalendar является подклассом Calendar, который представляет обычный Григорианский календарь. Метод getInstance() класса Calendar обычно возвращает объект класса GregorianCalendar, инициированный текущей датой и временем согласно региональным настройкам.
Кроме стандартных методов, которые есть в классе Calendar, у GregorianCalendar есть метод isLeapYear() для проверки високосного года:
Если год високосный, то возвращается true.
Отсчёт месяцев идёт от нуля, поэтому декабрь будет одиннадцатым месяцем. Чтобы не путаться с такими случаями, проще использовать понятные константы:
А получать нужные отрезки времени можно через метод get (). Например, узнать, какой месяц содержится в созданной нами дате можно так:
Изменить состояние объекта можно через метод set (). Например, установим новую дату у нашего объекта.
Можно сдвинуть дату на определённый период с помощью метода add (). Отодвинем дату на два месяца.
Методы getTime() и setTime() работают с объектами Date и полезны для преобразования.
Класс TimeZone
Класс TimeZone предназначен для совместного использования с классами Calendar и DateFormat. Этот класс абстрактный, поэтому от него порождать объекты нельзя. Вместо этого определен статический метод getDefault(), который возвращает экземпляр наследника TimeZone с настройками, взятыми из операционной системы, под управлением которой работает JVM.
TimeZone имеет статический метод getTimeZone(String ID), используя который можно указать наименование конкретного временного пояса, для которого необходимо получить объект TimeZone.
Набор полей, определяющих возможный набор параметров для getTimeZone, нигде явно не описывается. Но имеется статический метод getAvailableIds(), возвращающий список возможных значений наименование временных зон типа String[], который можно использовать в методе getTimeZone. Так можно определить набор возможных параметров для конкретного временного пояса относительно Гринвича String[] getAvailableIds(int offset).
Рассмотрим пример, в котором на консоль последовательно выводятся:
— временная зона по умолчанию;
— список всех возможных временных зон;
— список временных зон, которые совпадают с временной зоной Москвы.
Пример получения списка TimeZone
Код программы несложный. Метод align выполняет выравнивание для отображения смещения по времени TimeZone от среднего времени по Гринвичу GMT — времени меридиана, проходящего через прежнее место расположения Гринвичской обсерватории около Лондона. Метод drawTimeZoneParam отображает параметры TimeZone. В конструкторе класса TimeZoneList сначала определяется текущая TimeZone, после чего выводится список возможных TimeZone. И в заключении, используя метод getAvailableIDs получаем список TimeZone, у которых смещение по времени соответствует текущей зоне.
В результате работы программы в консоль будет выведена следующая информация (первый список в усеченном виде):
TimeZone UTC
UTC было введено вместо устаревшего среднего времени по Гринвичу (GMT), поскольку GMT является неравномерной шкалой и связана с суточным вращением Земли. Шкала UTC основана на равномерной шкале атомного времени и является более удобной для гражданского использования.
Как может влиять TimeZone, с точки зрения разработчика, на результаты работы программы? Давайте представим себе ситуацию, что время формируется на сервере (объект типа Date) и отправляется удаленному пользователю по сети. Это типично для WEB-приложений, у которых сервер и пользователи (браузеры) могут быть расположены в разных временных зонах. Для отправки объекта Date по сети (Internet) используется сериализация, позволяющая упаковать объект в набор байт на сервере и восстановить объект типа Date на клиенте (браузере). И вот здесь Вас может ожидать «засада». Если сервер и клиент имеют разные TimeZone (часовые пояса), то на клиенте будет восстановлен объект Date с временем сервера. И наоборот, если объект будет отправлен с клиента на сервер, то на сервере объект десериализуется с временем клиента.
Конечно, объект Date можно конвертировать не сервере в текстовый вид, используя DateFormat, и на клиенте его восстановить. Но Java позволяет учитывать различные TimeZone, не оказывающие влияние на сериализацию/десериализацию объектов типа Date.
Давайте рассмотрим пример TimeZoneExample (код представлен ниже), в котором время будем привязывать к одной из сторон (желательно серверной), а на компьютере устанавливать различные зоны (UTC, Москва, Владивосток). Для установки определенной временной зоны необходимо открыть в панели управления окно «Date and Time» и выбрать соответствующую TimeZone.
Первоначально на компьютере устанавливаем зону UTC и получаем в консоли следующий текст :
Здесь следует сказать, что для зоны UTC и для зоны Москвы неформатированные даты (date, dt_msk) совпадают, но вот с учетом временной зоны форматированные даты отличаются на соответствующие 3 часа.
Теперь установим зону на компьютере зону Москвы и получим в консоли следующий текст :
Если приложение должно работать в определенной временной зоне TimeZone, то можно, используя метод setDefault класса TimeZone, установить соответствующую временную зону в приложении при работе с датой. В примере можно было бы снять комментарий с первой строки и установить сответствующую временную зону в приложении, не оказывая влияния на временную зону в настройках компьютера.
Скачать исходный код примера
Исходный код рассмотренных примеров можно скачать здесь (6.69 Кб).
Calendar getinstance java что это
Getting and Setting Calendar Field Values
Leniency
When a Calendar is in non-lenient mode, it throws an exception if there is any inconsistency in its calendar fields. For example, a GregorianCalendar always produces DAY_OF_MONTH values between 1 and the length of the month. A non-lenient GregorianCalendar throws an exception upon calculating its time or calendar field values if any out-of-range field value has been set.
First Week
Calendar Fields Resolution
If there is any conflict in calendar field values, Calendar gives priorities to calendar fields that have been set more recently. The following are the default combinations of the calendar fields. The most recent combination, as determined by the most recently set single field, will be used.
Field Manipulation
Example: Consider a GregorianCalendar originally set to August 31, 1999. Calling set(Calendar.MONTH, Calendar.SEPTEMBER) sets the date to September 31, 1999. This is a temporary internal representation that resolves to October 1, 1999 if getTime() is then called. However, a call to set(Calendar.DAY_OF_MONTH, 30) before the call to getTime() sets the date to September 30, 1999, since no recomputation occurs after set() itself.
roll(f, delta) adds delta to field f without changing larger fields. This is equivalent to calling add(f, delta) with the following adjustment:
Calendar getinstance java что это
Getting and Setting Calendar Field Values
Leniency
When a Calendar is in non-lenient mode, it throws an exception if there is any inconsistency in its calendar fields. For example, a GregorianCalendar always produces DAY_OF_MONTH values between 1 and the length of the month. A non-lenient GregorianCalendar throws an exception upon calculating its time or calendar field values if any out-of-range field value has been set.
First Week
Calendar Fields Resolution
If there is any conflict in calendar field values, Calendar gives priorities to calendar fields that have been set more recently. The following are the default combinations of the calendar fields. The most recent combination, as determined by the most recently set single field, will be used.
Field Manipulation
Example: Consider a GregorianCalendar originally set to August 31, 1999. Calling set(Calendar.MONTH, Calendar.SEPTEMBER) sets the date to September 31, 1999. This is a temporary internal representation that resolves to October 1, 1999 if getTime() is then called. However, a call to set(Calendar.DAY_OF_MONTH, 30) before the call to getTime() sets the date to September 30, 1999, since no recomputation occurs after set() itself.
roll(f, delta) adds delta to field f without changing larger fields. This is equivalent to calling add(f, delta) with the following adjustment:
Класс календаря на Java с примерами
Класс Calendar в Java — это абстрактный класс, который предоставляет методы для преобразования даты между определенным моментом времени и набором полей календаря, таких как MONTH, YEAR, HOUR и т. Д. Он наследует класс Object и реализует интерфейсы Comparable, Serializable, Cloneable.
Поскольку это абстрактный класс, мы не можем использовать конструктор для создания экземпляра. Вместо этого нам придется использовать статический метод Calendar.getInstance () для создания экземпляра и реализации подкласса.
Java-программа для демонстрации метода getInstance () :
// Date getTime (): используется для возврата
// Объект даты, представляющий это
// Календарное значение времени.
public class Calendar1 <
public static void main(String args[])
Calendar c = Calendar.getInstance();
System.out.println( «The Current Date is:» + c.getTime());
Важные методы и их использование
| METHOD | DESCRIPTION |
|---|---|
| abstract void add(int field, int amount) | It is used to add or subtract the specified amount of time to the given calendar field, based on the calendar’s rules. |
| int get(int field) | It is used to return the value of the given calendar field. | abstract int getMaximum(int field) | It is used to return the maximum value for the given calendar field of this Calendar instance. | abstract int getMinimum(int field) | It is used to return the minimum value for the given calendar field of this Calendar instance. |
| Date getTime() | It is used to return a Date object representing this Calendar’s time value. |
Ниже программы иллюстрируют вышеуказанные методы:
Программа 1 : Java-программа для демонстрации метода get ().
// Программа для демонстрации метода get ()
// календарного класса
public class Calendar2 <
public static void main(String[] args)
// создаем объект календаря
Calendar calendar = Calendar.getInstance();
// Демонстрация метода get () в Календаре
System.out.println( «Current Calendar’s Year: » + calendar.get(Calendar.YEAR));
System.out.println( «Current Calendar’s Day: » + calendar.get(Calendar.DATE));
System.out.println( «Current MINUTE: » + calendar.get(Calendar.MINUTE));
System.out.println( «Current SECOND: » + calendar.get(Calendar.SECOND));
Программа 2 : Java-программа для демонстрации метода getMaximum ().
// Программа для демонстрации метода getMaximum ()
// календарного класса
public class Calendar3 <
public static void main(String[] args)
// создаем объект календаря
Calendar calendar = Calendar.getInstance();
int max = calendar.getMaximum(Calendar.DAY_OF_WEEK);
System.out.println( «Maximum number of days in a week: » + max);
System.out.println( «Maximum number of weeks in a year: » + max);
Программа 3 : Java-программа для демонстрации метода getMinimum ().
// Программа для демонстрации метода getMinimum ()
// календарного класса
public class Calendar4 <
public static void main(String[] args)
// создаем объект календаря
Calendar calendar = Calendar.getInstance();
int min = calendar.getMinimum(Calendar.DAY_OF_WEEK);
System.out.println( «Minimum number of days in week: » + min);
System.out.println( «Minimum number of weeks in year: » + min);
Программа 4 : Java-программа для демонстрации метода add ().
// Программа для демонстрации метода add ()
// календарного класса



