这种情况下正确的日期格式是什么?

What's the correct date format for this case?

我一直在尝试将字符串解析为日期,但是转换无效。

例如,我有这些字符串,是从网络服务中检索到的。

Dec 9, 2016 4:36:00 PM
Jan 12, 2017 11:36:15 AM

我尝试使用这些格式,但是,转换失败。

MMM d, yyyy HH:mm:ss aaa
MMM d, yyyy hh:mm:ss a

我哪里错了?

我遇到了这个异常
java.text.ParseException: Unparseable date: "Dec 9, 2016 4:36:00 PM"

请检查时间格式:

String dateString1 = "Dec 9, 2016 4:36:00 PM";
String dateString2 = "Jan 12, 2017 11:36:15 AM";

DateTimeFormatter formatter = DateTimeFormatter.ofPattern("MMM d, yyyy h:mm:ss a");

LocalDateTime localDateTime1 = LocalDateTime.parse(dateString1, formatter);
LocalDateTime localDateTime2 = LocalDateTime.parse(dateString2, formatter);

System.out.println(localDateTime1);
System.out.println(localDateTime2);

看到这种情况下的格式(时间部分)是:h:mm:ss a(因为小时是4,不是04)所以格式hh:mm:ss a会失败

对于您的输入,输出将是: 2016-12-09T16:36 2017-01-12T11:36:15

这只是@C.P.O 答案的变体,使用的模式略有不同。

import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;

import org.junit.Test;

public class blam
{
    private static final String VALUE1 = "Dec 9, 2016 4:36:00 PM";
    private static final String VALUE2 = "Jan 12, 2017 11:36:15 AM";

    @Test
    public void test()
    {
        DateTimeFormatter dateTimeFormatter;
        LocalDateTime value;

        dateTimeFormatter = DateTimeFormatter.ofPattern("MMM d, u h:m:s a");

        value = LocalDateTime.parse(VALUE1, dateTimeFormatter);
        System.out.println("value1. " + VALUE1 + " becomes: " + value);


        value = LocalDateTime.parse(VALUE2, dateTimeFormatter);
        System.out.println("value2. " + VALUE2 + " becomes: " + value);
    }
}

一些注意事项:

  • y 是“年代”
  • u 是“年”
  • MMM 是必需的。 “M”和“MM”都不适用于您的情况。
  • 我更喜欢“s”而不是“ss”,因为“s”将解析 2 和 12,但“ss”将无法解析“2”

我不知道使用 'y' 而不是 'u' 的真正影响。