Аномалия в дате жесткого кодирования в Java - PullRequest
0 голосов
/ 02 апреля 2019

При настройке дат в Java наблюдалась аномалия.

Я пытаюсь сделать следующее: -

Date date1 = new Date("10/12/2018");

Итак, когда я печатаю дату, наступает будущее Он печатал эту дату: - 14 июня 2019 года.

Когда я делаю следующее: -

Date date1 = new SimpleDateFormat("dd/MM/yyyy").parse("10/12/2018");

Показывает точную дату. Может кто-нибудь объяснить, почему это произошло? Заранее спасибо.

Ответы [ 2 ]

1 голос
/ 02 апреля 2019

Конструктор Date () (Примечание: он устарел!) Не знает, что такое месяц и год.

США: ММ / дд / гггг, в то время как в Европе это дд / мм / гггг.

Во второй форме вы явно.В первой форме он выбирает неправильную.

0 голосов
/ 02 апреля 2019

java.time

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

    LocalDate date2 = LocalDate.of(2018, Month.OCTOBER, 12);
    System.out.println("Harcoded date: " + date2);

Вы никогда не будете сомневаться, какой месяц, день и год.Вывод:

Дата с кодировкой: 2018-10-12

Следует избегать плохо спроектированного и давно устаревшего класса Date и даже более его устаревших конструкторов.Вместо этого я использую LocalDate из java.time, современного Java-API даты и времени.Также LocalDate представляет календарную дату (без времени суток), в отличие от Date, которая, несмотря на свое название, представляет собой момент времени.

Кстати, я не смог воспроизвести вашу проблему.Я получаю Fri Oct 12 00:00:00 CEST 2018 (что также согласуется с документацией, хотя эта часть документации очень трудна для чтения и понимания).

Ссылка: Руководство по Oracle: Date Time , объясняющее, как использовать java.time.

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