这种情况下正确的日期格式是什么?
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' 的真正影响。
我一直在尝试将字符串解析为日期,但是转换无效。
例如,我有这些字符串,是从网络服务中检索到的。
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' 的真正影响。