Научитесь создавать новую дату, получать текущую дату, анализировать дату в строку или форматировать объект Date с помощью класса java.util.Date. Эти варианты использования часто требуются, и наличие их в одном месте поможет сэкономить время многим из нас.
Стоит отметить, что с экземпляром Date не связана информация о часовом поясе. Экземпляр Date представляет время, прошедшее с Epach в миллисекундах. Если мы печатаем экземпляр date, он всегда печатает часовой пояс по умолчанию или локальный часовой пояс машины. Поэтому информация о часовом поясе, печатаемая в методе Date.toString(), не должна вводить вас в заблуждение.
1. Форматирование даты в строку
Программа Java форматирования даты в строку с помощью SimpleDateFormat.format(). Обратите внимание, что SimpleDateFormat не является потокобезопасным классом, поэтому мы не должны совместно использовать его экземпляр с несколькими потоками.
SimpleDateFormat sdf = new SimpleDateFormat("dd/M/yyyy");String date = sdf.format(new Date());
Подробные шаблоны даты и времени см. в SimpleDateFormat JavaDoc. Ниже приведен список наиболее распространенных шаблонов букв, которые вы можете использовать.
y = year (yy or yyyy)M = month (MM)d = day in month(dd)h = hour(0-12) (hh)H = hour(0-23) (HH)m = minute in hour(mm)s = seconds(ss)S = milliseconds(SSS)z = time zone text (e.g. Pacific Standard Time...)Z = time zone, time offset(e.g. -0800)
Шаблон | Пример |
---|---|
гггг-ММ-дд( ISO ) | «2018-07-14» |
дд-МММ-гггг | «14-июл-2018» |
дд/ММ/гггг | «14/07/2018» |
Е, МММ дд гггг | «Сб, 14 июля 2018» |
ч:мм а | «12:08 PM» |
EEEE, MMM дд, гггг ЧЧ:мм:сс а | «Суббота, 14 июля 2018 г., 14:31:06» |
гггг-ММ-дд'Т'ЧЧ:мм:ссZ | «2018-07-14T14:31:30+0530» |
чч 'o''clock' a, zzzz | «12 часов дня по тихоокеанскому летнему времени» |
К:мм а, я | «00:08 PM, PDT» |
2. Анализ строки на сегодняшний день
Программа Java для анализа строки в экземпляр Date с использованием метода SimpleDateFormat.parse().
SimpleDateFormat sdf = new SimpleDateFormat("dd-M-yyyy hh:mm:ss");String dateInString = "15-10-2015 10:20:56";Date date = sdf.parse(dateInString);
3. Получение текущей даты и времени
Класс java.util.Date представляет дату и время, прошедшие с начала эпохи. Ниже приведены программы Java для получения текущей даты и времени и печати в заданном формате.
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");Date date = new Date();System.out.println(dateFormat.format(date));
Для справки: начиная с Java 8 мы можем использовать классы LocalDate, LocalTime и LocalDateTime.
LocalDate today = LocalDate.now();System.out.println("Today's Local date : " + today);LocalTime time = LocalTime.now();System.out.println("local time now : " + time);
4. Преобразование между датой и календарем
4.1 Преобразование календаря в дату
Calendar calendar = Calendar.getInstance();Date date = calendar.getTime();
4.2 Преобразование даты в календарь
SimpleDateFormat sdf = new SimpleDateFormat("dd-M-yyyy hh:mm:ss");String dateInString = "27-04-2016 10:22:56";Date date = sdf.parse(dateInString);Calendar calendar = Calendar.getInstance();calendar.setTime(date);
5. Сравнение двух дат
Мы можем сравнить два экземпляра даты, используя его метод compareTo(). Он возвращает целочисленное значение, представляющее, что данная дата находится до или после другой даты.
Сравнение date1.CompareTo(date2) вернет:
- значение 0, если date2 равна date1;
- значение меньше 0, если date1 предшествует date2;
- значение больше 0, если дата1 после даты2.
Date date1 = new Date();Date date2 = new Date();int comparison = date1.compareTo(date2);
6. Извлечение дней, месяцев и лет
Программа на Java для получения частей даты, таких как год, месяц и т. д. по отдельности.
Методы получения года, месяца, дня месяца, часа и т. д. устарели. Если вам нужно получить или установить год, месяц, день месяца и т. д., используйте вместо этого java.util.Calendar.
Calendar calendar = Calendar.getInstance();calendar.setTime(new Date());int year = calendar.get(Calendar.YEAR);int month = calendar.get(Calendar.MONTH);int dayOfMonth = calendar.get(Calendar.DAY_OF_MONTH); // Jan = 0, not 1int dayOfWeek = calendar.get(Calendar.DAY_OF_WEEK);int weekOfYear = calendar.get(Calendar.WEEK_OF_YEAR);int weekOfMonth= calendar.get(Calendar.WEEK_OF_MONTH);int hour = calendar.get(Calendar.HOUR); // 12 hour clockint hourOfDay = calendar.get(Calendar.HOUR_OF_DAY); // 24 hour clockint minute = calendar.get(Calendar.MINUTE);int second = calendar.get(Calendar.SECOND);int millisecond= calendar.get(Calendar.MILLISECOND);