Java 8 Дата выхода в формате ГГГГ-ММ-ДД - PullRequest
0 голосов
/ 11 января 2020

У меня есть геттер в Java 8, который я установил ниже, проблема в том, что вывод Sat Jan 11 00:00:00 AEDT 2020

Класс должен оставаться как Date, StartDate - это LocalDate.

public static Date getStartDate() {
    return Date.from(StartDate.atStartOfDay()
                      .atZone(ZoneId.systemDefault())
                      .toInstant());
}

Мне нужно, чтобы оно возвращало значение как YYYY-MM-DD, и я изо всех сил пытаюсь его выяснить.

Да, это задание. Не знаю, в логе c, где нам сказали установить один на Date, а другой на LocalDate, кроме как раздражать меня ......

Любая помощь приветствуется.

Ответы [ 4 ]

3 голосов
/ 11 января 2020

Пожалуйста, попробуйте это решение.

public static String getStartDate() {
    DateTimeFormatter oldPattern = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss.SSSz");
    DateTimeFormatter newPattern = DateTimeFormatter.ofPattern("yyyy-MM-dd");
    LocalDateTime datetime = LocalDateTime.parse(new Date().toInstant().toString(), oldPattern);
    return datetime.format(newPattern);
}
1 голос
/ 11 января 2020

Я думаю, вы можете попробовать это, чтобы получить значение даты как "гггг-мм-дд"

import java.text.SimpleDateFormat;
import java.util.Date;

public class Test {
    public static void main(String[] args) {
        String pattern = "yyyy-MM-dd";
        SimpleDateFormat simpleDateFormat = new SimpleDateFormat(pattern);

        String date = simpleDateFormat.format(new Date());
        System.out.println(date);
    }
}
0 голосов
/ 11 января 2020

Возвращая экземпляр java.util.Date, вы не можете отформатировать его. Он всегда будет возвращен как объект Date. Если вы хотите, чтобы это было в строке,

SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
String formattedDate = sdf.format(new Date());

, где new Date() - текущая дата, какой бы объект даты вы ни поместили, объект sdf (java.text.SimpleDateFormat) сделает это. Вы можете обратиться к java 8 документов SimpleDateFormat для получения дополнительной информации.

0 голосов
/ 11 января 2020

Простой ответ - SimpleDateFormatter

Когда вы утверждаете, что тип, возвращаемый getStartDate, должен оставаться Date. В этом случае самый простой способ сделать это - использовать класс SimpleDateFormat:

. Вы можете передать дату в SimpleDateFormatter:

SimpleDateFormat iso_8601_formatter = new SimpleDateFormat("yyyy-MM-dd");
System.out.println(iso_8601_formatter.format(getStartDate());

Более подробную информацию можно найти по адресу в этом сообщении в блоге.

Ответ по передовому опыту - используйте java.time

Как отметил Оле В.В., если станет возможным рефакторинг кода, было бы лучше объединить кодовую базу вокруг java.time вместо того, чтобы смешивать этот API с java.util.Date. Это можно сделать с помощью DateTimeFormatter

DateTimeFormatter iso_8601_formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
LocalDate start = StartDate.atStartOfDay();
System.out.println(start.format(iso_8601_formatter));

Обратите внимание, что DateTimeFormatter предоставляет константу DateTimeFormatter.ISO_LOCAL_DATE для печати значений в формате ISO-8601.

Подробнее об улучшениях, сделанных в новом API, можно найти в этой статье.

...