Работа с 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 не поддается интернационализации.
- Невозможность форматирования календаря.
- Январь представлен 0 вместо 1 - источник ошибок.
- Calendar не был типобезопасным; например, вы должны передавать int константу к get (int field) методом. Справедливости ради, перечисления еще не были доступны, когда был выпущен Calendar.
- Изменчивость Calendar делает его небезопасным для использования в многопоточных сценариях без внешней синхронизации. «Компаньоны» классы java.util.TimeZone и java.text.DateFormat также имеют эту проблему.
- Calendar сохраняет свое состояние внутренне двумя различными способами - как число миллисекунд, смещенных от эпохи, и как набор полей - в результате получается немало ошибок и проблем с производительностью.
Очевидно, что необходим был более надежный API для обеспечения функциональности даты и времени в программах Java.
Продолжение: Обзор Java Date и Time API
Автор этого материала - я - Пахолков Юрий. Я оказываю услуги по написанию программ на языках Java, C++, C# (а также консультирую по ним) и созданию сайтов. Работаю с сайтами на CMS OpenCart, WordPress, ModX и самописными. Кроме этого, работаю напрямую с JavaScript, PHP, CSS, HTML - то есть могу доработать ваш сайт или помочь с веб-программированием. Пишите сюда.
Отправляя сообщение я подтверждаю, что ознакомлен и согласен с политикой конфиденциальности данного сайта.