Преобразование из одного формата времени в другой - PullRequest
0 голосов
/ 04 февраля 2020

Возможно ли преобразовать эту строку даты, используя Java пакет времени

3-6-2017

в этот формат

"Mon Mar 6 00:00:00 EST 2017"

Я создал эти два средства форматирования, но какой момент времени следует использовать? Я пробовал LocalDate, LocalDateTime и ZonedDateTime.

DateTimeFormatter inputFormat = DateTimeFormatter.ofPattern("M-d-uuuu");
DateTimeFormatter convertedToFormat = DateTimeFormatter.ofPattern("EEE MMM dd hh:mm:ss zzz yyyy");

1 Ответ

4 голосов
/ 04 февраля 2020

Я полагаю, что у вас есть три вопроса:

  1. Чтобы принять месяц из 1 или 2 цифр (например, 3 для марта и 11 для ноября), вам нужно указать одну букву шаблона M, не два Аналогично для дня месяца. Таким образом, ваша строка шаблона входного формата должна быть M-d-uuuu (или просто M-d-u). Редактировать: Вам также нужно d вместо dd в шаблоне «преобразован в».
  2. Чтобы напечатать час дня (с 00 по 23), вам нужно прописные буквы HH. Нижний регистр hh предназначен для часовых часов в пределах AM или PM с 01 по 12.
  3. Поскольку во входной строке не было времени суток, вам нужно указать время суток другим способом. Аналогично для часового пояса, поскольку ваш формат «преобразован в» содержит zzz для сокращения часового пояса.

Поэтому в коде я предлагаю:

    DateTimeFormatter inputFormat = DateTimeFormatter.ofPattern("M-d-uuuu");
    DateTimeFormatter convertedToFormat = DateTimeFormatter.ofPattern("EEE MMM d HH:mm:ss zzz yyyy");

    String input = "3-6-2017";
    ZonedDateTime startOfDay = LocalDate.parse(input, inputFormat)
            .atStartOfDay(ZoneId.of("America/New_York"));
    String output = startOfDay.format(convertedToFormat);

    System.out.println(output);

Выходные данные из моего фрагмента - это Желаемый:

Пн Мар 6 00:00:00 EST 2017

Или ответить на ваш вопрос немного более прямо:

… какой момент времени я должен использовать?

Вам нужно два из них: LocalDate для анализа вашего ввода и ZonedDateTime для форматирования вашего вывода. И затем преобразование между двумя. Метод one-arg atStartOfDay обеспечивает преобразование, которое нам нужно. (Существует хитрость для синтаксического анализа непосредственно в ZonedDateTime с использованием значений по умолчанию для часового и часового пояса, но это более сложно.)

Существуют другие часовые пояса, которые также выдают EST как сокращение часового пояса. , Поскольку в вашем профиле написано, что вы в Бостоне, я думаю, что America / New_York - это то, что вам нужно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...