Java дата начало дня

Java 8 дата и время

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

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

    • java.util.Date — самый древний способ. Большая часть методов отмечена устаревшими, но сам класс до сих пор используется довольно часто.
    • java.util.Calendar — обычно используется совместно с java . util . Date .
    • Пакет java.time — новый способ, сильно превосходит предыдущие по удобству и функционалу, но используется пока не так часто (по крайней мере мне редко приходилось сталкиваться.

    java.util.Date

    Самый древний способ. Если вы посмотрите на описание методов java.util.Date, то вы заметите, что большая часть методов указана устаревшими. Реально полезного и работающего всего чуть-чуть.

    Полезные методы класса java . util . Date :

    Возвращает true , если дата объекта находится позже указанной.

    Возвращает true , если дата объекта находится перед указанной.

    Сравнение дат. Возвращает 0, если даты равны. Возвращает -1, если дата объекта находится до anotherDate . Возвращает 1, если дата объекта позже anotherDate .

    Используются для конвертации в Instant из пакета java . time и обратно.

    Возвращает и устанавливает значение java . util . Date в количестве миллисекунд, прошедших с 1 января 1970 года 00:00 GMT.

    java.util.Calendar

    Класс java.util.Calendar является абстрактным классом. Единственная реализация — java . util . GregorianCalendar . Новый экземпляр создаётся фабричным методом:

    Calendar предоставляет методы установки значений различных полей вроде YEAR , MONTH , DAY_OF_MONTH , HOUR и т. д, манипуляции этими полями, например добавление дня или месяца. Дата и время представляется количеством миллисекунд, прошедших с 1 января 1970 года 00:00:00.000 GMT. Обычно класс java . util . Calendar используется для создания экземпляров java . util . Date , представляющих необходимую дату и время.

    Calendar имеет два режима интерпретации полей: мягкий (lenient) и жёсткий (non-lenient). Когда Calendar в мягком (lenient) режиме, то он принимает больший диапазон значений полей, чем возвращает. Когда Calendar пересчитывает значения полей, возвращаемых get ( ) , то все поля нормализуются. Например, мягкий GregorianCalendar интерпретирует MONTH == JANUARY , DAY_OF_MONTH == 32 как 1 февраля.

    Когда Calendar в жёстком (non-lenient) режиме, то он бросает исключение в подобных случаях. Например, GregorianCalendar всегда возвращает значение поля DAY_OF_MONTH в диапазоне от 1 до длины месяца. Жёсткий GregorianCalendar бросает исключение во время выполнения вычислений своего времени или поля, если хоть одно поле выходит за допустимые границы.

    Устанавливает новое значения поля.

    Возвращает значение поля. Для мягкого режима значения полей нормализуются, а в случае жёсткого режима и выхода значения какого-либо поля за допустимый диапазон бросается исключение

    Добавляет amount (может быть отрицательным) к указанному полю.

    Конвертация в java . util . Date и обратно.

    Устанавливает мягкий (lenient) или жёсткий (non-lenient) режим.

    Конвертирует в Instant из пакета java . time .

    Позволяет установить часовой пояс. По умолчанию используется часовой пояс системы, на которой запущена программа. С помощью этого метода можно указать другой часовой пояс. Например: calender . setTimeZone ( TimeZone . getTimeZone ( «America/Los_Angeles» ) ) ;

    Возвращает часовой пояс, ассоциированный с данным экземпляром Calendar .

    java.time

    Наиболее удобный и современный способ работы с датой и временем. Берёт своё начало от библиотеки Joda-Time.

    Есть два базовых способа представления времени. Один способ представляет время в терминах человека, таких как год, месяц, день, час, минуты и секунды. Второй способ представляет машинное время, измеряя время непрерывно с начала, называемого эпохой, в наносекундах. Пакет Date-Time содержит большое количество классов, представляющий дату и время. Некоторые классы в Date-Time API представляют машинное время, некоторые человеческое.

    Сначала определите, какие аспекты даты и времени вам нужны, затем выберите класс или классы, которые подходят под ваши нужды.

    Например, вы можете выбрать java . time . LocalDate для хранения даты рождения, так как многие люди празднуют день рождения в тот же день, независимо от того, находятся ли они в месте рождения или на другом конце Земли. Если вам нужно астрологическое время, то вы можете использовать java . time . LocalDateTime , чтобы показать дату и день рождения, либо java . time . ZonedDateTime , который дополнительно содержит часовой пояс. Если вы создаёте временную отметку, то вероятнее всего вы захотите использовать java . time . Instant , который позволяет сравнивать одну временную отметку с другой.

    Суммарная таблица классов пакета java . time :

    Класс или перечисление Год Месяц День Часы Минуты Секунды* Смещ. врем. зоны Zone ID toString Output
    Instant x 2013-08-20T15:16:26.355Z
    LocalDate x x x 2013-08-20
    LocalDateTime x x x x x x 2013-08-20T08:16:26.937
    ZonedDateTime x x x x x x x x 2013-08-21T00:16:26.941+09:00[Asia/Tokyo]
    LocalTime x x x 08:16:26.943
    MonthDay x x --08-20
    Year x 2013
    YearMonth x x 2013-08
    Month x AUGUST
    OffsetDateTime x x x x x x x 2013-08-20T08:16:26.954-07:00
    OffsetTime x x x x 08:16:26.957-07:00
    Duration ** ** ** x PT20H (20 hours)
    Period x x x *** *** P10D (10 days)

    * секунды считаются с точностью до наносекунд
    ** Этот класс не сохраняет эту информацию, но имеет методы для получения времени в них.
    *** Когда Period добавляется к ZonedDateTime , то учитывается переход на зимнее/летнее время и отличие локального времени.

    java.time.DayOfWeek

    Перечисление java.time.DayOfWeek состоит из семи констант, описывающих дни недели. Целочисленные значения для констант начинаются с 1 (Понедельник) и заканчиваются 7 (Воскресенье).

    MONDAY (понедельник, 1)
    TUESDAY (вторник, 2)
    WEDNESDAY (среда, 3)
    THURSDAY (четверг, 4)
    FRIDAY (пятница, 5)
    SATURDAY (суббота, 6)
    SUNDAY (воскресенье, 7)

    Вы можете использовать метод public String getDisplayName ( TextStyle style , Locale locale ) для получения названий дней недели в соответствии с региональными настройками пользователя. Перечисление java . time . format . TextStyle позволяет указать тип строки: FULL , NARROW (обычно одна буква), SHORT (аббревиатура).

    Источник

    17. 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(), чтобы вывести текущую дату и время следующим образом:

    import java.util.Date; public class Test < public static void main(String args[]) < // Инициализация объекта date Date date = new Date(); // Вывод текущей даты и времени с использованием toString() System.out.println(date.toString()); >> 

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

    Sun Nov 13 00:14:19 FET 2016 

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

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

    • Можно использовать функцию getTime(), чтобы получить количество миллисекунд, прошедших с момента полуночи 1 января 1970, для обоих объектов, а затем сравнить эти два значения.
    • Вы можете использовать методы before(), after() и equals(). Поскольку 12 число месяца раньше 18 числа, например, new Date(99, 2, 12).before(new Date (99, 2, 18)) возвращает значение true.
    • Можно использовать метод compareTo(), который определяется сопоставимым интерфейсом и реализуется по дате.

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

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

    import java.util.*; import java.text.*; public class Test < public static void main(String args[]) < Date dateNow = new Date(); SimpleDateFormat formatForDateNow = new SimpleDateFormat("E yyyy.MM.dd 'и время' hh:mm:ss a zzz"); System.out.println("Текущая дата " + formatForDateNow.format(dateNow)); >> 

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

    Текущая дата Вс 2016.11.13 и время 12:12:36 AM FET 

    Формат-коды 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 и заканчивая одним из символов в таблице, приведенных ниже. Например:

    import java.util.Date; public class Test < public static void main(String args[]) < // Инициализация объекта date Date date = new Date(); // Вывод текущей даты и времени с использованием toString() String str = String.format("Текущая дата и время: %tc", date); System.out.printf(str); >> 

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

    Текущая дата и время: Вс ноя 13 00:55:59 FET 2016 

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

    Индекс должен непосредственно следовать за % и завершаться $. Например:

    import java.util.Date; public class Test < public static void main(String args[]) < // Инициализация объекта date Date date = new Date(); // Вывод текущей даты с использованием toString() System.out.printf("%1$s %2$td %2$tB %2$tY", "Дата:", date); >> 

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

    Источник

    Читайте также:  Awesome Quiz App | CodingNepal
Оцените статью