Как парсить дату в java

Класс Date

1. Класс Date и Unix-время

Все дело в том, что он очень простой и удобный. И вы как программист обязательно столкнетесь c ним в любом реальном проекте. Использовать его или нет — выбор за вами, но знать его вы обязаны. Поэтому уделите ему несколько минут вашего драгоценного времени.

Почему именно с 1970 года? Это так называемое Unix-time : именно так хранит время операционная система Unix, которая является бабушкой всех современных операционных систем.

Зато можно очень легко узнать, сколько времени прошло между двумя датами: достаточно вычесть одну дату из другой, и получится разница во времени между датами с точностью до миллисекунд.

2. Получение текущей даты

Вывод текущей даты на экран

КодВывод на экран

Вывод на экран расшифровывается так:

ТекстРасшифровка
Thu rsdayЧетверг
Feb ruary 2121 Февраля
14:01:34часы : минуты : секунды
EETЧасовой пояс: East European Time (восточноевропейское время)
2019Год

3. Задание определенной даты

Тут тоже все просто. Чтобы задать определенный день, нужно написать код вида:

Все просто и очевидно, но есть два нюанса:

Это тоже наследие операционной системы Unix: там программисты обозначали год двумя цифрами. Вместо 1977 писали просто 77. Поэтому 77 станет правильным годом, если мы считаем от 1900 года.

Например, я родился 21 марта 1989 года. Март — третий месяц, значит мне нужно написать

КодВывод на экран

Месяцы нумеруются с нуля, а дни — нет. Немного странно, да?

Думаем, настоящие программисты должны были пересилить себя и дни месяца тоже нумеровать с нуля. Ох уж эти конформисты 🙂

Задание определенного времени

Задать определенное время тоже достаточно просто: для этого нужно написать команду вида:

Часы, минуты и секунды нумеруются с нуля: программист внутри вас должен вздохнуть спокойно.

КодВывод на экран

4. Работа с фрагментами даты

МетодОписание
Возвращает год даты относительно 1900 года.
Возвращает месяц даты, месяцы нумеруются с нуля
Возвращает день месяца
Возвращает день недели
Возвращает часы
Возвращает минуты
Возвращает секунды
КодВывод на экранПримечание
2005 год
июнь
день месяца
суббота

Кстати, у объекта Date отдельные фрагменты даты можно не только получать, но и изменять:

МетодОписание
void setYear (int year)Меняет год даты. Год задаётся относительно 1900 года.
void setMonth (int month)Меняет месяц даты, месяцы нумеруются с нуля
void setDate (int date)Меняет день месяца
void setHours (int hours)Меняет часы
void setMinutes (int minutes)Меняет минуты
void setSeconds (int seconds)Меняет секунды

5. Миллисекунды

Как мы уже говорили, внутри объекта Date хранится количество миллисекунд, прошедшее с 1 января 1970 года.

Если оно нам нужно, мы можем получить его у объекта Date :

Вы можете не просто получить количество миллисекунд, но и изменить его в существующем объекте:

Кстати, можно записать эту конструкцию короче, передав время в объект Date прямо во время его создания:

6. Сравнение дат

Если вы хотите сравнить две даты и узнать, какая из них была раньше, для этого есть три способа

Способ первый — просто сравнить количество миллисекунд, которое в них хранится:

Способ второй — использовать метод before() объекта Date :

Способ третий — использовать метод after() объекта Date :

7. Класс DateFormat

И без года. Ну или с годом, если надо. В общем, хотелось бы отображать дату разными способами.

Код
Вывод на экран

Более детально мы разберём этот класс позднее.

8. Метод Date.parse

Класс Date умеет делать еще одну интересную и полезную вещь: получать дату из текстовой строки. Или как говорят программисты, парсить строку.

Кстати, этот же код можно записать более компактно:

Более подробно парсинг строк мы разберем в других лекциях.

Источник

Parsing and Formatting

The temporal-based classes in the Date-Time API provide parse methods for parsing a string that contains date and time information. These classes also provide format methods for formatting temporal-based objects for display. In both cases, the process is similar: you provide a pattern to the DateTimeFormatter to create a formatter object. This formatter is then passed to the parse or format method.

The DateTimeFormatter class provides numerous predefined formatters, or you can define your own.

The parse and the format methods throw an exception if a problem occurs during the conversion process. Therefore, your parse code should catch the DateTimeParseException error and your format code should catch the DateTimeException error. For more information on exception handing, see Catching and Handling Exceptions.

The DateTimeFormatter class is both immutable and thread-safe; it can (and should) be assigned to a static constant where appropriate.

Parsing

The one-argument parse(CharSequence) method in the LocalDate class uses the ISO_LOCAL_DATE formatter. To specify a different formatter, you can use the two-argument parse(CharSequence, DateTimeFormatter) method. The following example uses the predefined BASIC_ISO_DATE formatter, which uses the format 19590709 for July 9, 1959.

The documentation for the DateTimeFormatter class specifies the full list of symbols that you can use to specify a pattern for formatting or parsing.

The StringConverter example on the Non-ISO Date Conversion page provides another example of a date formatter.

Formatting

The output for this example, which prints both the arrival and departure time, is as follows:

Источник

1. Класс DateTimeFormatter

Пользоваться им очень просто. Сначала нужно создать объект класса DateTimeFormatter и передать в него шаблон, по которому будут отображаться дата и время:

КодВывод на экран

В примере выше мы с помощью метода ofPattern () создаем объект DateTimeFormatter на основе строки-шаблона. А в следующей строке с помощью метода format () преобразовываем объект типа LocalDateTime в строку. Результат вы видите на экране.

В метод format () можно передать практически любой объект из Date Time API.

2. Шаблон форматирования

Строка, переданная в качестве паттерна, используется как шаблон при выводе информации. MM заменяется на номер месяца, dd — на день месяца, yy на номер года. Регистр букв имеет значение.

Полная таблица преобразования времени выглядит так:

БукваОбозначение
yГод (Year)
MМесяц (Month)
dДень (day)
HЧасы (Hours)
mМинуты (Minutes)
sСекунды (Seconds)
SТысячные доли секунды
nНаносекунды.

В принципе запомнить не сложно.

А почему тогда в шаблоне из примера буквы MM, dd и yy были написаны по два раза? А вот тут уже становится интереснее.

Общая идея

Количество букв влияет на длину текста. Чем большое букв, тем длиннее будет текст.

Если буква H указывается один раз, то 9 часов будут отображаться как 9, а если буква H указывается два раза подряд, то 9 часов будут отображаться как 09.

Если буква y указывается 2 раза подряд, то год пишется 2 цифрами, если 4 раза подряд — 4-мя цифрами.

Если буква M указывается 2 раза подряд, то пишется номер месяца, если 3 раза подряд, то название месяца (3 первых буквы), если 4 раза подряд, то полное название месяца.

Источник

Преобразование java.util.Дата в строку

Изучите несколько методов преобразования объектов данных в строковые объекты в Java.

1. Обзор

2. Преобразование java.util.Дата в строку

Хотя мы не должны использовать java.util.Date если мы работаем с Java 8, иногда у нас нет выбора (например, мы получаем объект Date из библиотеки, которая не находится под нашим контролем).

В таких случаях у нас есть несколько способов преобразования java.util.Дата до Строка в нашем распоряжении.

2.1. Подготовка объекта даты

Давайте сначала объявим ожидаемое Строковое представление наших данных и определим шаблон желаемого формата даты:

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

Мы будем использовать этот экземпляр Date во всех приведенных ниже примерах.

2.2. Использование класса SimpleDateFormat

В этом примере мы будем использовать метод format() класса SimpleDateFormat |/. Давайте создадим его экземпляр, используя наш формат даты:

После этого мы можем отформатировать нашу дату и сравнить ее с ожидаемым результатом:

2.3. Использование абстрактного класса DateFormat

Как мы могли видеть, SimpleDateFormat является подклассом абстрактного DateFormat класса. Этот класс предоставляет различные методы форматирования даты и времени.

Мы будем использовать его для достижения того же результата, что и выше:

При таком подходе мы передаем шаблоны стилей — MEDIUM для даты и SHORT для времени в нашем случае.

3. Использование класса форматирования

Хотя это может быть не самое читаемое решение, это потокобезопасный однострочный файл, который может быть полезен, особенно в многопоточной среде (мы должны иметь в виду, что SimpleDateFormat не является потокобезопасным):

4. Преобразование С помощью Java 8 Date/Time API

Чтобы использовать новый API, нам нужно преобразовать наш Data объект в Instant объект:

Поскольку наша ожидаемая Строка имеет как части даты, так и части времени, нам также необходимо преобразовать объект Instant в LocalDateTime :

И, наконец, мы можем легко получить нашу отформатированную строку :

5. Заключение

Затем мы использовали класс Formatter и, наконец, API даты и времени Java 8.

Источник

Дата парсить строку для некоторых Java-объект

Я работаю в проекте, который читает файлы и обрабатывает данные. Там я стал работать с датами, например:

Я нашел пакет Joda, интересный пакет, но не знаю, самый ли он простой.

Я думаю, это сработало, но проблема со вторым форматом. Как я могу использовать такой ввод для извлечения объекта, предпочтительно объекта Joda. Я уверен, что могу написать функцию, чтобы изменить формат на то, что поддерживает Joda, но было интересно, будет ли какой-то другой способ (даже некоторая родная библиотека Java) сделать это.

Если есть что-то лучше, чем Джода там, пожалуйста, дайте мне знать, а также.

6 ответов

используя Joda-Time, взгляните на DateTimeFormat; он позволяет анализировать оба типа строк даты, которые вы упоминаете (и почти любые другие произвольные форматы). Если ваши потребности еще более сложны, попробуйте DateTimeFormatterBuilder.

Edit: на самом деле LocalDateTime является более подходящим типом для datetime без часового пояса:

и да, Joda-Time-это определенно путь, насколько это касается обработки даты и времени Java. 🙂

как в основном все согласятся, Joda-исключительно удобная библиотека. Например, я никогда раньше не делал такого анализа с Джодой, но мне потребовалось всего несколько минут, чтобы понять это из API и написать его.

обновление (2015)

если вы Java 8 в большинстве случаев вы должны просто использовать java.time вместо Joda-время. Он содержит почти все хорошие вещи-или их эквиваленты-от Джоды. Для тех, кто уже знаком с Joda APIs, Stephen Colebourne Joda-время для java.руководство по миграции времени пригодится.

вот java.версии выше примеры.

вы не можете проанализировать это в ZonedDateTime или OffsetDateTime (которые являются аналогами DateTime Джоды, используемые в моем первоначальном ответе), но это имеет смысл, потому что в анализируемой строке нет информации о часовом поясе.

здесь LocalDate является наиболее подходящим типом для анализа (так же, как с Joda-Time).

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *