Учебники

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

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

Класс Date поддерживает два конструктора, как показано в следующей таблице.

Sr.No. Конструктор и описание
1

Дата( )

Этот конструктор инициализирует объект с текущей датой и временем.

2

Дата (длинный миллисек)

Этот конструктор принимает аргумент, равный количеству миллисекунд, прошедших с полуночи 1 января 1970 года.

Дата( )

Этот конструктор инициализирует объект с текущей датой и временем.

Дата (длинный миллисек)

Этот конструктор принимает аргумент, равный количеству миллисекунд, прошедших с полуночи 1 января 1970 года.

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

Sr.No. Метод и описание
1

логическое после (Дата дата)

Возвращает true, если вызывающий объект Date содержит дату, которая позже даты, указанной в date, в противном случае он возвращает false.

2

логическое значение до (дата дата)

Возвращает true, если вызывающий объект Date содержит дату, более раннюю, чем та, которая указана в date, в противном случае он возвращает false.

3

Клон объекта ()

Дублирует вызывающий объект Date.

4

int compareTo (Дата дата)

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

5

int compareTo (Object obj)

Действует одинаково для compareTo (Date), если obj имеет класс Date. В противном случае он создает исключение ClassCastException.

6

логическое равенство (дата объекта)

Возвращает true, если вызывающий объект Date содержит то же время и дату, что и объект, указанный в date, в противном случае он возвращает false.

7

long getTime ()

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

8

int hashCode ()

Возвращает хеш-код для вызывающего объекта.

9

void setTime (долгое время)

Устанавливает время и дату, указанные по времени, которое представляет истекшее время в миллисекундах с полуночи 1 января 1970 года.

10

Строка toString ()

Преобразует вызывающий объект Date в строку и возвращает результат.

логическое после (Дата дата)

Возвращает true, если вызывающий объект Date содержит дату, которая позже даты, указанной в date, в противном случае он возвращает false.

логическое значение до (дата дата)

Возвращает true, если вызывающий объект Date содержит дату, более раннюю, чем та, которая указана в date, в противном случае он возвращает false.

Клон объекта ()

Дублирует вызывающий объект Date.

int compareTo (Дата дата)

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

int compareTo (Object obj)

Действует одинаково для compareTo (Date), если obj имеет класс Date. В противном случае он создает исключение ClassCastException.

логическое равенство (дата объекта)

Возвращает true, если вызывающий объект Date содержит то же время и дату, что и объект, указанный в date, в противном случае он возвращает false.

long getTime ()

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

int hashCode ()

Возвращает хеш-код для вызывающего объекта.

void setTime (долгое время)

Устанавливает время и дату, указанные по времени, которое представляет истекшее время в миллисекундах с полуночи 1 января 1970 года.

Строка toString ()

Преобразует вызывающий объект Date в строку и возвращает результат.

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

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

пример

Live Demo

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-му, например, новая Дата (99, 2, 12) .before (новая Дата (99, 2, 18)) возвращает true.

  • Вы можете использовать метод compareTo (), который определяется интерфейсом Comparable и реализуется датой.

Вы можете использовать getTime (), чтобы получить количество миллисекунд, прошедших с полуночи 1 января 1970 года, для обоих объектов, а затем сравнить эти два значения.

Вы можете использовать методы before (), after () и equals (). Поскольку 12-е число месяца предшествует 18-му, например, новая Дата (99, 2, 12) .before (новая Дата (99, 2, 18)) возвращает true.

Вы можете использовать метод compareTo (), который определяется интерфейсом Comparable и реализуется датой.

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

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

пример

Live Demo

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 зарезервированы как буквы шаблона, которые определены следующим образом:

символ Описание пример
г Обозначение эпохи ОБЪЯВЛЕНИЕ
Y Год в четыре цифры 2001
M Месяц в году Июль или 07
d День в месяце 10
час Час в AM / PM (1 ~ 12) 12
ЧАС Час в день (0 ~ 23) 22
м Минута в час 30
s Секунда в минуту 55
S миллисекунды 234
Е День в неделю вторник
D День в году 360
F День недели в месяце 2 (вторая среда в июле)
вес Неделя в году 40
W Неделя в месяце 1
AM / PM маркер ВЕЧЕРА
К Час в день (1 ~ 24) 24
К Час в AM / PM (0 ~ 11) 10
Z Часовой пояс Восточное стандартное время
Побег для текста Разделитель
« Одинарные цитаты `

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

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

пример

Live Demo

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

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

Индекс должен следовать сразу за%, и он должен заканчиваться на $.

пример

Live Demo

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

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

пример

Live Demo

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

Символы преобразования даты и времени

символ Описание пример
с Полная дата и время Пн Май 04 09:51:52 CDT 2009
F Дата ISO 8601 2004-02-09
D Дата в США (месяц / день / год) 02/09/2004
T 24-часовое время 18:05:19
р 12 часов 06:05:19
р 24 часа, без секунд 18:05
Y Четырехзначный год (с ведущими нулями) 2004
Y Последние две цифры года (с ведущими нулями) 04
С Первые две цифры года (с ведущими нулями) 20
В Полное название месяца февраль
б Сокращенное название месяца февраль
м Двузначный месяц (с ведущими нулями) 02
d Двузначный день (с ведущими нулями) 03
е Двузначный день (без начальных нулей) 9
Полное название дня недели понедельник
Сокращенное название дня недели понедельник
J Трехзначный день года (с ведущими нулями) 069
ЧАС Двузначный час (с ведущими нулями), между 00 и 23 18
К Двузначный час (без начальных нулей), от 0 до 23 18
я Двузначный час (с ведущими нулями), между 01 и 12 06
L Двузначный час (без начальных нулей), от 1 до 12 6
M Двузначные минуты (с ведущими нулями) 05
S Двузначные секунды (с ведущими нулями) 19
L Трехзначные миллисекунды (с ведущими нулями) 047
N Девятизначные наносекунды (с ведущими нулями) 047000000
п Прописные метки утром или днем ВЕЧЕРА
п Строчный маркер утром или днем вечера
Z RFC 822 числовое смещение от GMT -0800
Z Часовой пояс Тихоокеанское стандартное время
s Секунды с 1970-01-01 00:00:00 по Гринвичу 1078884319
Q Миллисекунды с 1970-01-01 00:00:00 по Гринвичу 1078884319047

Есть и другие полезные классы, связанные с датой и временем. Для получения более подробной информации вы можете обратиться к документации по стандарту Java.

Разбор строк в даты

Класс SimpleDateFormat имеет несколько дополнительных методов, в частности parse (), который пытается проанализировать строку в соответствии с форматом, хранящимся в данном объекте SimpleDateFormat.

пример

Live Demo

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 секунд —

пример

Live Demo

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

Измерение прошедшего времени

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

пример

Live Demo

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 —

Sr.No. Конструктор и описание
1

Григорианский календарь()

Создает по умолчанию GregorianCalendar, используя текущее время в часовом поясе по умолчанию и локаль по умолчанию.

2

GregorianCalendar (int год, int месяц, int дата)

Создает GregorianCalendar с заданной датой, установленной в часовом поясе по умолчанию с локалью по умолчанию.

3

GregorianCalendar (int год, int месяц, int дата, int час, int минута)

Создает GregorianCalendar с заданной датой и временем, установленными для часового пояса по умолчанию с языковым стандартом по умолчанию.

4

GregorianCalendar (int год, int месяц, int дата, int час, int минута, int секунда)

Создает GregorianCalendar с заданной датой и временем, установленными для часового пояса по умолчанию с языковым стандартом по умолчанию.

5

GregorianCalendar (Locale aLocale)

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

6

GregorianCalendar (часовой пояс)

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

7

GregorianCalendar (часовой пояс, локаль и локаль)

Создает GregorianCalendar на основе текущего времени в заданном часовом поясе с заданным языковым стандартом.

Григорианский календарь()

Создает по умолчанию GregorianCalendar, используя текущее время в часовом поясе по умолчанию и локаль по умолчанию.

GregorianCalendar (int год, int месяц, int дата)

Создает GregorianCalendar с заданной датой, установленной в часовом поясе по умолчанию с локалью по умолчанию.

GregorianCalendar (int год, int месяц, int дата, int час, int минута)

Создает GregorianCalendar с заданной датой и временем, установленными для часового пояса по умолчанию с языковым стандартом по умолчанию.

GregorianCalendar (int год, int месяц, int дата, int час, int минута, int секунда)

Создает GregorianCalendar с заданной датой и временем, установленными для часового пояса по умолчанию с языковым стандартом по умолчанию.

GregorianCalendar (Locale aLocale)

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

GregorianCalendar (часовой пояс)

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

GregorianCalendar (часовой пояс, локаль и локаль)

Создает GregorianCalendar на основе текущего времени в заданном часовом поясе с заданным языковым стандартом.

Вот список нескольких полезных методов поддержки, предоставляемых классом GregorianCalendar —

Sr.No. Метод и описание
1

void add (поле int, значение int)

Добавляет указанное (подписанное) количество времени к указанному полю времени на основе правил календаря.

2

защищенный void computeFields ()

Преобразует UTC в миллисекундах в значения поля времени.

3

защищенный void computeTime ()

Календарь переопределений Преобразует значения поля времени в UTC в миллисекундах.

4

логическое равенство (Object obj)

Сравнивает этот GregorianCalendar со ссылкой на объект.

5

int get (int field)

Получает значение для данного временного поля.

6

int getActualMaximum (int field)

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

7

int getActualMinimum (int field)

Возвращает минимальное значение, которое может иметь это поле, учитывая текущую дату.

8

int getGreatestMinimum (int field)

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

9

Дата getGregorianChange ()

Получает дату изменения григорианского календаря.

10

int getLeastMaximum (int field)

Возвращает самое низкое максимальное значение для данного поля, если изменяется.

11

int getMaximum (int field)

Возвращает максимальное значение для данного поля.

12

Дата getTime ()

Получает текущее время этого календаря.

13

long getTimeInMillis ()

Получает текущее время этого Календаря как long.

14

TimeZone getTimeZone ()

Получает часовой пояс.

15

int getMinimum (int field)

Возвращает минимальное значение для данного поля.

16

int hashCode ()

Переопределяет hashCode.

17

логическое значение isLeapYear (int year)

Определяет, является ли данный год високосным.

18

void roll (int field, boolean up)

Добавляет или вычитает (вверх / вниз) одну единицу времени в данном поле времени без изменения больших полей.

19

void set (int field, int value)

Устанавливает поле времени с заданным значением.

20

недействительный набор (int year, int month, int date)

Устанавливает значения для полей год, месяц и дата.

21

void set (int год, int месяц, int дата, int час, int минута)

Устанавливает значения для полей год, месяц, дата, час и минута.

22

void set (int год, int месяц, int дата, int час, int минута, int секунда)

Устанавливает значения для полей год, месяц, дата, час, минута и секунда.

23

void setGregorianChange (Дата дата)

Устанавливает дату изменения GregorianCalendar.

24

void setTime (Дата, дата)

Устанавливает текущее время этого календаря с заданной датой.

25

void setTimeInMillis (длинный миллис)

Устанавливает текущее время этого календаря из заданного длинного значения.

26

void setTimeZone (значение TimeZone)

Устанавливает часовой пояс с заданным значением часового пояса.

27

Строка toString ()

Возвращает строковое представление этого календаря.

void add (поле int, значение int)

Добавляет указанное (подписанное) количество времени к указанному полю времени на основе правил календаря.

защищенный void computeFields ()

Преобразует UTC в миллисекундах в значения поля времени.

защищенный void computeTime ()

Календарь переопределений Преобразует значения поля времени в UTC в миллисекундах.

логическое равенство (Object obj)

Сравнивает этот GregorianCalendar со ссылкой на объект.

int get (int field)

Получает значение для данного временного поля.

int getActualMaximum (int field)

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

int getActualMinimum (int field)

Возвращает минимальное значение, которое может иметь это поле, учитывая текущую дату.

int getGreatestMinimum (int field)

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

Дата getGregorianChange ()

Получает дату изменения григорианского календаря.

int getLeastMaximum (int field)

Возвращает самое низкое максимальное значение для данного поля, если изменяется.

int getMaximum (int field)

Возвращает максимальное значение для данного поля.

Дата getTime ()

Получает текущее время этого календаря.

long getTimeInMillis ()

Получает текущее время этого Календаря как long.

TimeZone getTimeZone ()

Получает часовой пояс.

int getMinimum (int field)

Возвращает минимальное значение для данного поля.

int hashCode ()

Переопределяет hashCode.

логическое значение isLeapYear (int year)

Определяет, является ли данный год високосным.

void roll (int field, boolean up)

Добавляет или вычитает (вверх / вниз) одну единицу времени в данном поле времени без изменения больших полей.

void set (int field, int value)

Устанавливает поле времени с заданным значением.

недействительный набор (int year, int month, int date)

Устанавливает значения для полей год, месяц и дата.

void set (int год, int месяц, int дата, int час, int минута)

Устанавливает значения для полей год, месяц, дата, час и минута.

void set (int год, int месяц, int дата, int час, int минута, int секунда)

Устанавливает значения для полей год, месяц, дата, час, минута и секунда.

void setGregorianChange (Дата дата)

Устанавливает дату изменения GregorianCalendar.

void setTime (Дата, дата)

Устанавливает текущее время этого календаря с заданной датой.

void setTimeInMillis (длинный миллис)

Устанавливает текущее время этого календаря из заданного длинного значения.

void setTimeZone (значение TimeZone)

Устанавливает часовой пояс с заданным значением часового пояса.

Строка toString ()

Возвращает строковое представление этого календаря.

пример

Live Demo

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.