Промышленное производство
Промышленный Интернет вещей | Промышленные материалы | Техническое обслуживание и ремонт оборудования | Промышленное программирование |
home  MfgRobots >> Промышленное производство >  >> Industrial programming >> java

Работа с датой и временем в Java: Date, SimpleDateFormat, printf, GregorianCalendar

Класс Date (java.util) инкапсулирует текущую дату и время.

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

№КонструкторОписание
1Date()Текущая дата и время.
2Date(long millisec)Миллисекунды с полуночи 1 января 1970 (epoch).

Методы Date

№МетодОписание
1after(Date)True, если позднее аргумента.
2before(Date)True, если ранее аргумента.
3clone()Копия объекта.
4compareTo(Date)Сравнение: 0=равны, <0=раньше, >0=позже.
5compareTo(Object)Как выше, иначе ClassCastException.
6equals(Object)Равенство даты и времени.
7getTime()Миллисекунды с epoch.
8hashCode()Хэш-код.
9setTime(long)Установка времени в мс с epoch.
10toString()Строковое представление.

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

import java.util.Date;
Date date = new Date();
System.out.println(date.toString()); // e.g. Mon May 04 09:51:52 CDT 2009

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

Форматирование через SimpleDateFormat

Локально-зависимое форматирование/парсинг. Пользовательские паттерны.

import java.util.*; import java.text.*;
Date dNow = new Date();
SimpleDateFormat ft = new SimpleDateFormat("E yyyy.MM.dd 'at' hh:mm:ss a zzz");
System.out.println("Current Date: " + ft.format(dNow));
// Current Date: Sun 2004.07.18 at 04:14:09 PM PDT

Коды формата SimpleDateFormat

СимволОписаниеПример
GЭраAD
yГод (4 цифры)2001
MМесяцJuly / 07
dДень месяца10
hЧас (1-12)12
HЧас (0-23)22
mМинута30
sСекунда55
SМиллисекунда234
EДень неделиTuesday
DДень года360
FДень недели в месяце2 (2-я среда в июле)
wНеделя года40
WНеделя месяца1
aAM/PMPM
kЧас (1-24)24
KЧас (0-11)10
zЧасовой поясEastern Standard Time
'Экранирование текстаРазделитель

Форматирование через printf

Двухбуквенный формат, начинающийся с t.

Date date = new Date();
System.out.printf("%tc", date); // Sat Dec 15 16:37:57 MST 2012

Индексация аргументов: %1$s %2$tB %2$td, %2$tY или флаг < для повторного использования.

System.out.printf("%s %tB %

Символы конвертации даты/времени для printf

СимволОписаниеПример
cПолная дата и времяMon May 04 09:51:52 CDT 2009
FISO 86012004-02-09
DUS (month/day/year)02/09/2004
T24-часовое время18:05:19
r12-часовое время06:05:19 pm
R24-часовое без секунд18:05
YГод (4 цифры)2004
yПоследние 2 цифры года04
CПервые 2 цифры года20
BПолное имя месяцаFebruary
bСокращённое имя месяцаFeb
mМесяц (2 цифры)02
dДень (2 цифры)03
eДень (без ведущих нулей)9
AПолное имя дня неделиMonday
aСокращённое имя дня неделиMon
jДень года (3 цифры)069
HЧас 00-2318
kЧас 0-2318
IЧас 01-1206
lЧас 1-126
MМинуты (2 цифры)05
SСекунды (2 цифры)19
LМиллисекунды (3 цифры)047
NНаносекунды (9 цифр)047000000
PAM/PM верхний регистрPM
pam/pm нижний регистрpm
zRFC 822 смещение от GMT-0800
ZЧасовой поясPST
sСекунды с 1970-01-011078884319
QМиллисекунды с 1970-01-011078884319047

Парсинг строк в даты

SimpleDateFormat.parse() разбирает строку по заданному формату.

SimpleDateFormat ft = new SimpleDateFormat("yyyy-MM-dd");
String input = "1818-11-11";
Date t = ft.parse(input); // Wed Nov 11 00:00:00 EST 1818

Приостановка выполнения (sleep)

Thread.sleep(5*60*10); // 3000 мс = 3 сек

Измерение затраченного времени

long start = System.currentTimeMillis();
Thread.sleep(3000);
long diff = System.currentTimeMillis() - start; // ~3000 мс

GregorianCalendar

Конкретная реализация календаря (обычный григорианский). getInstance() возвращает экземпляр с текущей датой/временем/локалью/зоной. Поля AD, BC — эры.

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

№Конструктор
1GregorianCalendar()
2GregorianCalendar(int year, int month, int date)
3GregorianCalendar(int year, int month, int date, int hour, int minute)
4GregorianCalendar(int year, int month, int date, int hour, int minute, int second)
5GregorianCalendar(Locale)
6GregorianCalendar(TimeZone)
7GregorianCalendar(TimeZone, Locale)

Полезные методы (из 27)

№Метод
1add(field, amount) — добавить время к полю.
2get(field) — значение поля (YEAR, MONTH, DATE, HOUR...).
3getActualMaximum(field) / Minimum — макс/мин значение поля для текущей даты.
4isLeapYear(year) — високосный ли год.
5roll(field, up) — +-1 единицу поля без изменения старших.
6set(field, value) / set(year, month, date, ...) — установка полей.
7getTime() / getTimeInMillis() — текущее время как Date/long.
8setTimeZone(TimeZone) — смена зоны.
9toString() — строковое представление календаря.

Пример

GregorianCalendar gcal = new GregorianCalendar();
String[] months = {"Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"};
System.out.print("Date: " + months[gcal.get(Calendar.MONTH)] + " " + gcal.get(Calendar.DATE) + " " + gcal.get(Calendar.YEAR));
System.out.print("Time: " + gcal.get(Calendar.HOUR) + ":" + gcal.get(Calendar.MINUTE) + ":" + gcal.get(Calendar.SECOND));
if (gcal.isLeapYear(gcal.get(Calendar.YEAR))) System.out.println("Leap year");
else System.out.println("Not leap year");
// Date: Apr 22 2009 Time: 11:25:27 The current year is not a leap year

Для полного списка констант Calendar — стандартная документация Java.

java

  1. Классы и объекты в C#: Фундаменты надёжного ООП
  2. Получение текущей даты и времени в Python: практическое руководство
  3. Переменные и литералы в Java: подробное руководство
  4. Понимание выражений, операторов и блоков в Java
  5. Классы и объекты в Java: практическое руководство
  6. Абстрактные классы и методы в Java: полное руководство
  7. Вложенные и внутренние классы в Java: типы, примеры и лучшие практики
  8. Паттерн Singleton в Java: как реализовать и безопасно использовать
  9. Java throw vs throws: мастерство обработки исключений с практическими примерами
  10. Освоение Java Autoboxing и Unboxing: практические примеры и лучшие практики