如何将日期时间数据的字符串转换为LocalDate?

时间:2019-08-28 21:07:06

标签: java date datetime datetime-parsing

我有一个日期时间信息字符串,我正尝试将其转换为LocalDate字段。字符串的内容为'2019-08-28 09:00:00'。我正在尝试获取MM / dd / yyyy LocalDate值以加载到JavaFX DatePicker字段中。

我尝试过

Date date = new SimpleDateFormat("MM/dd/yyyy").parse(stringDate);

DateTimeFormatter formatter = DateTimeFormatter.ofPattern("MM/dd/yyyy");
LocalDate localDate = LocalDate.parse((CharSequence) date, formatter);

都返回了错误。从选项#2返回的错误如下:

Caused by: java.time.format.DateTimeParseException: Text '2019-08-30 12:00:00' could not be parsed at index 2
    at java.time.format.DateTimeFormatter.parseResolved0(DateTimeFormatter.java:1949)
    at java.time.format.DateTimeFormatter.parse(DateTimeFormatter.java:1851)
    at java.time.LocalDate.parse(LocalDate.java:400)
    at utils.DateTimeConverter.convertStringDateToLocalDate(DateTimeConverter.java:27)

2 个答案:

答案 0 :(得分:-1)

您的模式不包括相关的时间信息。您也需要包括在内。

Date date = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse(stringDate);

答案 1 :(得分:-1)

这取决于您要实现什么目标?

如果结果是带有小时,分钟和秒的日期,则DateFormatter比DateTimeFormatter更合适

DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
LocalDate localDate = LocalDate.parse(date, formatter);

OR

DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
LocalTimeDate localDateWithTime = LocalTimeDate.parse(date, formatter);

之所以产生错误,是因为您想使用DateTimeFormatter而不是LocalDate来生成日期,而该日期不带LocalTimeDate,而CharSequence的类型正确您的图案格式。

注意:您不必将String强制转换为yyyy-MM-dd

编辑2:

如果要将日期选择器中的日期设置为2019-08-28,则模式应为MM-dd-yyyy而不是@Test public void testDate() { String date = "2019-08-30 12:00:00"; DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); LocalDateTime localTimeDate = LocalDateTime.parse(date, formatter); assertTrue(localTimeDate.toString().equals(date)); } @Test public void testDateWithoutTime() { String date = "2019-08-30"; DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd"); LocalDate localDate = LocalDate.parse(date, formatter); assertTrue(localDate.toString().equals(date)); }

这里的JUnit测试有效了我的意思:

        var BuildContent = [{ 'Cal': Cal, 'BarLength': BarLength, 'Color': 
        Color }];
        content = JSON.stringify(BuildContent);
        $.ajax({
            type: "POST",
            url: "../Build/Build",
            data: {'content':content},
            ContentType: "application/json",
            dataType: "json",
        });