как узнать текущую дату java

16. Java — Дата и время

Java предоставляет класс Date, который доступен в пакете java.util, этот класс заключает в себе текущую дату и время.

Содержание

Конструкторы

Класс Date поддерживает два конструктора, которые показаны ниже.

Конструктор и описание
1 Date()
Этот конструктор инициализирует объект с текущей датой и временем.
2 Date(long millisec)
Этот конструктор принимает аргумент равный числу миллисекунд, истекших с полуночи 1 января 1970 г.

Методы класса Date

Ниже представлены методы класса Date.

Методы с описанием
1 boolean after(Date date)
Возвращает значение true, если вызывающий объект date содержит дату, которая раньше заданной даты, в противном случае он возвращает значение false.
2 boolean before(Date date)
Возвращает значение true, если вызывающий объект date содержит дату, более раннюю, чем заданная дата, в противном случае он возвращает значение false.
3 Object clone()
Дублирование вызывающего объекта date.
4 int compareTo(Date date)
Сравнивает значение вызывающего объекта с этой датой. Возвращает 0, если значения равны. Возвращает отрицательное значение, если объект вызова является более ранним, чем дата. Возвращает положительное значение, если объект вызова позже даты.
5 int compareTo(Object obj)
Работает точно так же compareTo(Date), если объект вызова имеет класс Date. В противном случае вызывает ClassCastException.
6 boolean equals(Object date)
Возвращает значение true, если вызывающий объект date содержит то же время и дату, которая указана в date, в противном случае он возвращает значение false.
7 long getTime()
Возвращает количество миллисекунд, истекших с 1 января 1970 года.
8 int hashCode()
Возвращает хэш-код для вызывающего объекта.
9 void setTime(long time)
Задает дату и время, соответствующие моменту времени, что представляет собой общее затраченное время в миллисекундах от полуночи 1 января 1970 года.
10 String toString()
Преобразует вызывающий объект date в строку и возвращает результат.

Текущая дата и время в Java

Получить текущую дату и время в Java достаточно не трудно. Вы можете использовать простой объект date вместе с методом toString(), чтобы вывести текущую дату и время следующим образом:

Получим следующий результат:

Сравнение дат

Существуют три способа в Java сравнить даты:

Форматирование даты с помощью SimpleDateFormat

SimpleDateFormat — это конкретный класс для парсинга и форматирования даты в Java. SimpleDateFormat позволяет начать с выбора любых пользовательских шаблонов для форматирования даты и времени. Например:

Получим следующий результат:

Формат-коды SimpleDateFormat

Для того, чтобы задать в Java формат даты и времени, используйте строковый шаблон (регулярные выражения) с датой и временем. В этой модели все буквы ASCII зарезервированы как шаблон письма, которые определяются следующим образом:

Символ Описание Пример
G Обозначение эры н.э.
y Год из четырех цифр 2016
M Номер месяца года 11
d Число месяца 13
h Формат часа в A.M./P.M.(1

12)

7
H Формат часа(0

23)

19
m Минуты 30
s Секунды 45
S Миллисекунды 511
E День недели Вс
D Номер дня в году 318
F Номер дня недели в месяце 2 (второе воскресение в этом месяце)
w Номер неделя в году 46
W Номер недели в месяце 2
a Маркер A.M./P.M. AM
k Формат часа(1

24)

24
K Формат часа в A.M./P.M.(0

11)

0
z Часовой пояс FET (Дальневосточноевропейское время)
Выделение для текста Текст
» Одинарная кавычка

Форматирование даты с помощью printf

Формат даты и времени можно сделать без труда с помощью метода printf. Вы используете формат двух букв, начиная с t и заканчивая одним из символов в таблице, приведенных ниже. Например:

Получим следующий результат:

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

Источник

Получение текущей даты и времени в Java

Использование Даты и Календарных Классов

В приведенном выше коде мы создали Date объект и указали формат для времени. В строке формата нижний регистр hh представляет 12-часовой формат while mm и ss представляет минуты в часах и секунды в минутах соответственно. Также a в строке формата находится маркер am / pm. Затем мы создали SimpleDateFormat объект, инициализированный строкой форматирования, и вызвали format() метод, передающий Date объект. format() Метод возвращает текущее время в формате мы указали.

Использование класса Calendar одинаково просто. Вот код

В приведенном выше коде мы вызвали getInstance() фабричный метод Calendar класса для получения Calendar объекта, а затем вызвали getTime() метод для него. Этот метод возвращает Date объект. Остальной код такой же, как я объяснил в предыдущем примере с датой. Единственное отличие, которое вы должны соблюдать, это строка формата. Здесь мы указали час как HH (верхний регистр), что даст нам время в 24-часовом формате.

CurrentTimeDateCalendar

Затем мы напишем тестовый класс.

CurrentTimeDateCalendarTest

Использование java.time

Команда Oracle по спецификации Java осознала ограничения встроенного API обработки даты и времени и для обеспечения более эффективного API представила пакет java.time в новой Java SE 8. Этот проект был разработан совместно Oracle и Стивеном Коулборном, автор Joda-Time. Новый API java.time « вдохновлен Joda-Time ».

Расчет времени часового пояса по умолчанию

В пакете java.time есть несколько классов для работы с датой и временем. Давайте начнем с некоторого кода для расчета текущего времени часового пояса по умолчанию.

В приведенном выше выводе обратите внимание, что время представлено с точностью до наносекунды.

Расчет времени другого часового пояса

Код для вычисления текущего времени другого часового пояса — это.

Расчет времени другого смещения времени

Код для использования класса ZoneOffset это.

Вывод предыдущего кода:

Полный код фрагментов, которые мы обсуждали, таков.

Давайте напишем тестовый класс, чтобы увидеть код в действии.

Вывод, полученный при запуске теста с использованием Maven, показан ниже, который, очевидно, будет отличаться в зависимости от вашего текущего времени и часового пояса.

Резюме

Помните, что когда вы используете параметры местного времени, Java проходит через JVM, чтобы общаться с любым компьютером, на котором работает. Вот как Java определяет время и локаль операций времени. Таким образом, ваш код может давать разные результаты при работе на разных машинах. В качестве предостережения, когда вы работаете с небольшими приложениями, часто вам не нужно беспокоиться о часовом поясе. Но в больших приложениях вы будете. Вам нужно, чтобы ваш код знал о часовом поясе. Многие разработчики игнорируют компонент часового пояса, а затем сталкиваются с проблемами по мере роста их приложения.

Источник

Дата и время в Java

Дата, время и их форматы в Java

Получить в Java текущую дату можно так:

Получим (дата Java, время Java):

Форматирование даты и времени в Java см. ниже.

Как задать другую, не текущую, дату в Java? Получим вчерашнюю дату:

Результат (дата Java, время Java):

Получить дату в Java с помощью GregorianCalendar:

Класс DateFormat

Форматируем дату и время в Java с помощью класса DateFormat. Это предустановленное форматирование для данной локали.

Как создать русскую локаль?

Форматируем Время в Java с помощью предустановленного формата

Форматируем дату и время с помощью предустановленного формата:

Класс SimpleDateFormat

Можно самому определить порядок форматирования с помощью класса SimpleDateFormat.

Пример (месяц прописью):

Форматируем дату и время:

Если в формате часов поставить маленькие буквы hh, т.е. hh:mm:ss, то получим:

здесь 08 вместо 20 часов.

Класс DateFormatSymbols

Чтобы названия месяцев были в родительном падеже используем класс DateFormatSymbols:

Класс MaskFormatter

Самое важное, что нужно знать про класс MaskFormatter, так это то, что форматирует он только СТРОКИ. Если надо форматировать дату, от даты переходим к строке, а уж строку форматируем MaskFormatter-ом. Пример:

то отсутствующие символы заменяются знаком подчёркивания.

Класс GregorianCalendar

Полезно знать класс GregorianCalendar при работе с датами. Класс GregorianCalendar расширяет класс Calendar в Java.

Создать объект GregorianCalendar для 27.04.2008 14:30:59:

Установить дату и время в объект GregorianCalendar:

Соответствующими методами get получаем элементы даты:

Прибавить/вычесть к дате дни можно методом add:

Другая возможность изменять дату — метод roll:

Проверим високосный ли год методом isLeapYear:

Источник

Классы 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 Кб).

Источник

Введение в API даты и времени Java 8

В этой статье мы рассмотрим новые API Java 8 для определения даты и времени, а также насколько проще создавать и манипулировать датами и временем.

1. Обзор

В рамках этой статьи давайте начнем с проблем в существующих Date и Calendar API и обсудим, как новые API Java 8 Date и Time решают их.

Дальнейшее чтение:

Работа с параметрами даты весной

Проверьте, является ли строка Допустимой датой в Java

2. Проблемы с существующими API-интерфейсами даты и времени

3. Использование LocalDate, LocalTime и LocalDateTime

Эти классы в основном используются, когда часовой пояс не требуется явно указывать в контексте. В рамках этого раздела мы рассмотрим наиболее часто используемые API.

3.1. Работа С LocalDate

Его можно использовать для хранения дат, таких как дни рождения и дни выплаты жалованья.

Экземпляр текущей даты может быть создан из системных часов, как показано ниже:

Local Date предоставляет различные служебные методы для получения разнообразной информации. Давайте быстро взглянем на некоторые из этих методов API.

Следующий фрагмент кода получает текущую локальную дату и добавляет один день:

В этом примере получается текущая дата и вычитается один месяц. Обратите внимание, как он принимает перечисление в качестве единицы времени:

Мы можем проверить, происходит ли дата в високосный год. В этом примере мы проверяем, является ли текущая дата високосным годом:

Связь одной даты с другой может быть определена до или после другой даты:

Теперь давайте посмотрим, как мы работаем с местным временем.

3.2. Работа С Местным Временем

Аналогично Local Data экземпляр LocalTime может быть создан из системных часов или с помощью методов “parse” и “of”. Быстрый взгляд на некоторые из часто используемых API ниже.

Экземпляр текущего Местного времени может быть создан из системных часов, как показано ниже:

Доступны различные методы получения, которые можно использовать для получения определенных единиц времени, таких как час, минута и сек, как показано ниже:

3.3. Работа С LocalDateTime

Это наиболее часто используемый класс, когда нам нужна комбинация даты и времени. Класс предлагает множество API, и мы рассмотрим некоторые из наиболее часто используемых.

Экземпляр LocalDateTime может быть получен из системных часов, аналогичных LocalDate и LocalTime:

Существуют служебные API для поддержки сложения и вычитания определенных единиц времени, таких как дни, месяцы, год и минуты. Приведенные ниже примеры кода демонстрируют использование методов “плюс” и “минус”. Эти API ведут себя точно так же, как их аналоги в LocalDate и LocalTime:

4. Использование API ZonedDateTime

В этом фрагменте кода мы создаем Зону для Парижа:

Набор всех идентификаторов зон можно получить следующим образом:

LocalDateTime может быть преобразован в определенную зону:

Метод ZonedDateTime предоставляет метод parse для получения конкретной даты часового пояса:

Затем мы добавим два часа к этому времени, создав смещение зоны и установив для экземпляра LocalDateTime :

5. Использование периода и продолжительности

Класс Period представляет количество времени в годах, месяцах и днях, а класс Duration представляет количество времени в секундах и наносекундах.

5.1. Работа С Периодом

Класс Period широко используется для изменения значений заданной даты или для получения разницы между двумя датами:

Период между двумя датами может быть получен в определенной единице, такой как дни, месяц или годы, с помощью ChronoUnit.between:

5.2. Работа С Длительностью

Подобно Period, класс Duration используется для работы с Time. В следующем коде мы создаем Местное время 6:30 утра, а затем добавляем продолжительность 30 секунд, чтобы сделать Местное время 06:30:30 утра:

Во втором примере мы используем метод between() класса ChronoUnit для выполнения той же операции:

Теперь мы рассмотрим, как преобразовать существующую Дату и Календарь в новую Дату Время.

6. Совместимость с датой и календарем

Теперь перейдем к Дате и времени форматированию.

7. Форматирование даты и времени

Java 8 предоставляет API для удобного форматирования Даты и времени :

Приведенный ниже код передает формат даты ISO для форматирования локальной даты. Результат будет 2015-01-25:

DateTimeFormatter предоставляет различные стандартные параметры форматирования. Пользовательские шаблоны также могут быть предоставлены для метода форматирования, как показано ниже, который вернет Локальную дату как 2015/01/25:

Давайте рассмотрим альтернативы, доступные для Java 8 Core Date |/Time |/API.

8. Backport и альтернативные варианты

8.1. Использование проектной информации

Для организаций, которые находятся на пути перехода на Java 8 с Java 7 или Java 6 и хотят использовать API даты и времени, project threeten предоставляет возможность обратного порта. Разработчики могут использовать классы, доступные в этом проекте, для достижения той же функциональности, что и в новом Java 8 Date и Time API, и как только они перейдут на Java 8, пакеты могут быть переключены. Артефакт для проекта можно найти в центральном репозитории maven :

8.2. Библиотека Joda-Time

9. Заключение

Java 8 предоставляет богатый набор API с согласованным дизайном API для облегчения разработки.

Примеры кода для приведенной выше статьи можно найти в репозитории Java 8 Date/Time git.

Источник

Читайте также:  не запускается empire total war на windows 10
Образовательный портал