Работа с Java Date и Time API: введение


Платформа Java меняется постоянно со времени своего первого выпуска. До Java SE 8 самым значительным изменениям язык подвергся в сентябре 2004 года - JDK 5. С тех пор прошло много лет и теперь релиз Java 8 является самым существенным. Все релизы Java привносят дополнения в язык, а также API – интерфейсы, учитывающие эмерджентные потребности программирования Java. В этой серии статей мы рассмотрим Date и Time API и поясним, почему это такое важное дополнение к Java SE.

Введение в Java Date и Time API

Date и Time - новые дата, время, календарь и API для платформы Java SE. Они были разработан в соответствии с JSR 310 и заменяют существующую дату и время в Java - инфраструктуру на базе java.util.Date и java.util.Calendar . Сейчас вам лучше использовать этот API в любом приложении. Не стоит применять устаревшие Date, Calendar и java.util.TimeZone классы; Calendar или TimeZone подклассы, такие как java.util.GregorianCalendar; или связанные с ними классы, такие как java.text.DateFormat.

Date и Time API проводит различие между машиной и человеком с помощью вида на временной шкале, которая представляет собой всегда возрастающую последовательность моментов времени или точек вдоль временной шкалы. Машинный вид времени – это последовательность целочисленных значений по отношению к эпохе (например, в полночь, 1 января 1970 г.), с положительными значениями определения моментов времени после эпохи, так и отрицательные значения определения моментов времени до эпохи. Человеческий вид - это набор полей (например, год, месяц, день-месяц, час, минута, секунда).

Зачем нам нужны новые Date и Time API?

В Java 1.0 был введен метод System.currentTimeMillis() , который могли бы вернуть машинный вид шкалы времени с точностью до миллисекунды. Также тогда был представлен класс java.util.Date, который возвращал времени «человеческий» вид. Вскоре стало очевидно, что существует несколько изъянов у этого класса:

  • Конструкторы, которые принимают в качестве аргумента год, требуют смещения от 1900 года – а это источник источником ошибок.
  • Январь представлен 0 вместо 1, что тоже источник ошибок.
  • Date не является описанием дату, а комбинацией даты и времени.
  • Возможность менять Date делает его небезопасным для использования в многопоточных сценариях без внешней синхронизации.
  • Date не поддается интернационализации.
В попытке исправить эти недостатки, Sun представила java.util.Calendar и связанные с ним классы с версии 1.1 Java. К сожалению, Calendar также имел недостатки, в том числе следующие:

  • Невозможность форматирования календаря.
  • Январь представлен 0 вместо 1 - источник ошибок.
  • Calendar не был типобезопасным; например, вы должны передавать int константу к get (int field) методом. Справедливости ради, перечисления еще не были доступны, когда был выпущен Calendar.
  • Изменчивость Calendar делает его небезопасным для использования в многопоточных сценариях без внешней синхронизации. «Компаньоны» классы java.util.TimeZone и java.text.DateFormat также имеют эту проблему.
  • Calendar сохраняет свое состояние внутренне двумя различными способами - как число миллисекунд, смещенных от эпохи, и как набор полей - в результате получается немало ошибок и проблем с производительностью.
Кроме того, java.sql 's Date , Time и Timestamp классы, расширяющие java.util.Date и наследующие свои проблемы. Также, для предотвращения установки времени участия в классе Date и часть даты в Time класс, Date и Time некоторые различные инкубационные методы выбрасывают исключение IllegalArgumentException.

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

Продолжение: Обзор Java Date и Time API
Автор этого материала - я - Пахолков Юрий. Я оказываю услуги по написанию программ на языках Java, C++, C# (а также консультирую по ним) и созданию сайтов. Работаю с сайтами на CMS OpenCart, WordPress, ModX и самописными. Кроме этого, работаю напрямую с JavaScript, PHP, CSS, HTML - то есть могу доработать ваш сайт или помочь с веб-программированием. Пишите сюда.

тегистатьи IT, java, Date, Time




Отправляя сообщение я подтверждаю, что ознакомлен и согласен с политикой конфиденциальности данного сайта.




Юмористический дневник бросающего курить
Что такое HTML?
Вычисление простых множителей в C#