Java — Дата и время
Java предоставляет Дату класс доступен в java.util package, этот класс инкапсулирует текущую дату и время.
Класс Date поддерживает два конструктора, как показано в следующей таблице.
Сер.№ | Конструктор и описание |
---|---|
1 | <тд>|
2 | <тд>
Ниже приведены методы класса даты.
Сер.№ | Метод и описание |
---|---|
1 | <тд>|
2 | <тд>|
3 | <тд>|
4 | <тд>|
5 | <тд>|
6 | <тд>|
7 | <тд>|
8 | <тд>|
9 | <тд>|
10 | <тд>
Получение текущей даты и времени
Это очень простой способ получить текущую дату и время в Java. Вы можете использовать простой объект Date с toString() метод для печати текущей даты и времени следующим образом —
Пример
Живая демонстрацияimport java.util.Date; public class DateDemo { public static void main(String args[]) { // Instantiate a Date object Date date = new Date(); // display time and date using toString() System.out.println(date.toString()); } }
Это даст следующий результат —
Вывод
on May 04 09:51:52 CDT 2009
Сравнение дат
Ниже приведены три способа сравнения двух дат —
-
Вы можете использовать getTime() для получения количества миллисекунд, прошедших с полуночи 1 января 1970 года для обоих объектов, а затем сравнить эти два значения.
-
Вы можете использовать методы before(), after() и equals(). Поскольку 12-е число месяца предшествует 18-му, например, new Date(99, 2, 12).before(new Date (99, 2, 18)) возвращает true.
-
Вы можете использовать метод compareTo(), который определяется интерфейсом Comparable и реализуется Date.
Форматирование даты с использованием SimpleDateFormat
SimpleDateFormat — это конкретный класс для форматирования и анализа дат с учетом региональных настроек. SimpleDateFormat позволяет начать с выбора любых пользовательских шаблонов для форматирования даты и времени.
Пример
Живая демонстрацияimport java.util.*; import java.text.*; public class DateDemo { public static void main(String args[]) { 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
Простые коды формата DateFormat
Чтобы указать формат времени, используйте строку шаблона времени. В этом шаблоне все буквы ASCII зарезервированы как буквы шаблона, которые определяются следующим образом —
Символ | Описание | Пример |
---|---|---|
Г | Обозначение эпохи | ОБЪЯВЛЕНИЕ |
г | Год в четырехзначном формате | 2001 |
М | Месяц в году | Июль или 07 |
д | День в месяце | <тд>10тд>|
ч | Час в A.M./P.M. (1~12) | 12 |
Н | Час в сутках (0~23) | 22 |
м | Минута в часе | 30 |
s | Секунда в минуту | <тд>55тд>|
С | Миллисекунды | 234 |
Е | День недели | Вторник |
Д | День в году | 360 |
Ф | День недели в месяце | 2 (вторая среда июля) |
в | Неделя в году | <тд>40тд>|
В | Неделя в месяце | <тд>1тд>|
а | A.M./P.M. маркер | PM |
к | Час в сутках (1~24) | <тд>24тд>|
К | Час в A.M./P.M. (0~11) | <тд>10тд>|
г | Часовой пояс | Восточное стандартное время |
' | Escape для текста | Разделитель |
" | Одинарная кавычка | <тд>`тд>
Форматирование даты с помощью printf
Форматирование даты и времени можно очень легко выполнить с помощью printf. метод. Вы используете двухбуквенный формат, начинающийся с t и заканчивается одной из букв таблицы, как показано в следующем коде.
Пример
Живая демонстрацияimport java.util.Date; public class DateDemo { public static void main(String args[]) { // Instantiate a Date object Date date = new Date(); // display time and date String str = String.format("Current Date/Time : %tc", date ); System.out.printf(str); } }
Это даст следующий результат —
Вывод
Current Date/Time : Sat Dec 15 16:37:57 MST 2012
Было бы немного глупо, если бы вам приходилось указывать дату несколько раз для форматирования каждой части. По этой причине строка формата может указывать индекс форматируемого аргумента.
Индекс должен следовать сразу за % и заканчиваться символом $.
Пример
Живая демонстрацияimport java.util.Date; public class DateDemo { public static void main(String args[]) { // Instantiate a Date object Date date = new Date(); // display time and date System.out.printf("%1$s %2$tB %2$td, %2$tY", "Due date:", date); } }
Это даст следующий результат —
Вывод
Due date: February 09, 2004
Кроме того, вы можете использовать флаг <. Он указывает, что тот же аргумент, что и в предыдущей спецификации формата, следует использовать снова.
Пример
Живая демонстрацияimport java.util.Date; public class DateDemo { public static void main(String args[]) { // Instantiate a Date object Date date = new Date(); // display formatted date System.out.printf("%s %tB %<te, %<tY", "Due date:", date); } }
Это даст следующий результат —
Вывод
Due date: February 09, 2004
Символы преобразования даты и времени
Символ | Описание | Пример |
---|---|---|
c | Заполните дату и время | Пн, 04 мая, 09:51:52 CDT 2009 |
Ф | Дата ISO 8601 | 2004-02-09 |
Д | США дата в формате (месяц/день/год) | 09.02.2004 |
Т | 24-часовое время | 18:05:19 |
р | 12 часов | 18:05:19 |
Р | 24-часовое время, без секунд | 18:05 |
Д | Четырехзначный год (с ведущими нулями) | 2004 |
y | Последние две цифры года (с ведущими нулями) | 04 |
C | Первые две цифры года (с ведущими нулями) | 20 |
Б | Полное название месяца | Февраль |
b | Сокращенное название месяца | Фев |
м | Двузначный месяц (с ведущими нулями) | <тд>02тд>|
д | Двузначный день (с ведущими нулями) | <тд>03тд>|
е | Двузначный день (без ведущих нулей) | <тд>9тд>|
А | Полное название дня недели | Понедельник |
а | Сокращенное название дня недели | Пн |
j | Трехзначный день года (с ведущими нулями) | 069 |
H | Час из двух цифр (с ведущими нулями), между 00 и 23 | 18 |
k | Час из двух цифр (без ведущих нулей), от 0 до 23 | 18 |
Я | Час из двух цифр (с ведущими нулями), между 01 и 12 | 06 |
l | Час из двух цифр (без ведущих нулей), от 1 до 12 | 6 |
M | Минуты из двух цифр (с ведущими нулями) | 05 |
S | Двузначное число секунд (с ведущими нулями) | 19 |
L | Три цифры в миллисекундах (с ведущими нулями) | 047 |
Н | Девять цифр в наносекундах (с ведущими нулями) | 047000000 |
P | Утренний или дневной маркер в верхнем регистре | PM |
p | Маркер утра или дня в нижнем регистре | вечер |
г | Числовое смещение RFC 822 от GMT | <тд>-0800тд>|
Я | Часовой пояс | PST |
s | Секунды с 01.01.1970 00:00:00 по Гринвичу | 1078884319 |
В | Миллисекунды с 01.01.1970 00:00:00 по Гринвичу | 1078884319047 |
Существуют и другие полезные классы, связанные с датой и временем. Дополнительные сведения см. в документации стандарта Java.
Разбор строк в даты
Класс SimpleDateFormat имеет несколько дополнительных методов, в частности parse(), который пытается проанализировать строку в соответствии с форматом, сохраненным в данном объекте SimpleDateFormat.
Пример
Живая демонстрацияimport java.util.*; import java.text.*; public class DateDemo { public static void main(String args[]) { SimpleDateFormat ft = new SimpleDateFormat ("yyyy-MM-dd"); String input = args.length == 0 ? "1818-11-11" : args[0]; System.out.print(input + " Parses as "); Date t; try { t = ft.parse(input); System.out.println(t); } catch (ParseException e) { System.out.println("Unparseable using " + ft); } } }
Пример запуска вышеуказанной программы даст следующий результат —
Вывод
1818-11-11 Parses as Wed Nov 11 00:00:00 EST 1818
Поспать немного
Вы можете спать в течение любого периода времени от одной миллисекунды до срока службы вашего компьютера. Например, следующая программа будет спать 3 секунды —
Пример
Живая демонстрацияimport java.util.*; public class SleepDemo { public static void main(String args[]) { try { System.out.println(new Date( ) + "\n"); Thread.sleep(5*60*10); System.out.println(new Date( ) + "\n"); } catch (Exception e) { System.out.println("Got an exception!"); } } }
Это даст следующий результат —
Вывод
Sun May 03 18:04:41 GMT 2009 Sun May 03 18:04:51 GMT 2009
Измерение прошедшего времени
Иногда вам может понадобиться измерить момент времени в миллисекундах. Итак, давайте еще раз перепишем приведенный выше пример —
Пример
Живая демонстрацияimport java.util.*; public class DiffDemo { public static void main(String args[]) { try { long start = System.currentTimeMillis( ); System.out.println(new Date( ) + "\n"); Thread.sleep(5*60*10); System.out.println(new Date( ) + "\n"); long end = System.currentTimeMillis( ); long diff = end - start; System.out.println("Difference is : " + diff); } catch (Exception e) { System.out.println("Got an exception!"); } } }
Это даст следующий результат —
Вывод
Sun May 03 18:16:51 GMT 2009 Sun May 03 18:16:57 GMT 2009 Difference is : 5993
Класс GregorianCalendar
GregorianCalendar — это конкретная реализация класса Calendar, которая реализует обычный григорианский календарь, с которым вы знакомы. В этом руководстве мы не обсуждали класс Calendar, для этого вы можете посмотреть стандартную документацию по Java.
getInstance() Метод Calendar возвращает GregorianCalendar, инициализированный текущей датой и временем в локали и часовом поясе по умолчанию. GregorianCalendar определяет два поля:AD и BC. Они представляют собой две эпохи, определенные григорианским календарем.
Есть также несколько конструкторов для объектов GregorianCalendar —
Сер.№ | Конструктор и описание |
---|---|
1 | <тд>|
2 | <тд>|
3 | <тд>|
4 | <тд>|
5 | <тд>|
6 | <тд>|
7 | <тд>
Вот список нескольких полезных методов поддержки, предоставляемых классом GregorianCalendar —
Сер.№ | Метод и описание |
---|---|
1 | <тд>|
2 | <тд>|
3 | <тд>|
4 | <тд>|
5 | <тд>|
6 | <тд>|
7 | <тд>|
8 | <тд>|
9 | <тд>|
10 | <тд>|
11 | <тд>|
12 | <тд>|
13 | <тд>|
14 | <тд>|
15 | <тд>|
16 | <тд>|
17 | <тд>|
18 | <тд>|
19 | <тд>|
20 | <тд>|
21 | <тд>|
22 | <тд>|
23 | <тд>|
24 | <тд>|
25 | <тд>|
26 | <тд>|
27 | <тд>
Пример
Живая демонстрацияimport java.util.*; public class GregorianCalendarDemo { public static void main(String args[]) { String months[] = {"Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"}; int year; // Create a Gregorian calendar initialized // with the current date and time in the // default locale and timezone. GregorianCalendar gcalendar = new GregorianCalendar(); // Display current time and date information. System.out.print("Date: "); System.out.print(months[gcalendar.get(Calendar.MONTH)]); System.out.print(" " + gcalendar.get(Calendar.DATE) + " "); System.out.println(year = gcalendar.get(Calendar.YEAR)); System.out.print("Time: "); System.out.print(gcalendar.get(Calendar.HOUR) + ":"); System.out.print(gcalendar.get(Calendar.MINUTE) + ":"); System.out.println(gcalendar.get(Calendar.SECOND)); // Test if the current year is a leap year if(gcalendar.isLeapYear(year)) { System.out.println("The current year is a leap year"); }else { System.out.println("The current year is not a leap year"); } } }
Это даст следующий результат —
Вывод
Date: Apr 22 2009 Time: 11:25:27 The current year is not a leap year
Полный список констант, доступных в классе Calendar, можно найти в стандартной документации по Java.
java
- Класс и объект С#
- Как получить текущую дату и время в Python?
- Переменные и литералы Java
- Java-выражения, операторы и блоки
- Java-класс и объекты
- Абстрактный класс Java и абстрактные методы
- Вложенный и внутренний класс Java
- Одноэлементный класс Java
- Java бросает и бросает
- Автоупаковка и распаковка Java