“线程中的异常”;“主要”;java.text.ParseException:不可解析的日期:";1527217399000“;

“线程中的异常”;“主要”;java.text.ParseException:不可解析的日期:";1527217399000“;,java,date,Java,Date,我有一些价值观 "createTime": 1527217399000, "updateTime": 1527218049000, "createTime": 1527217399000, "updateTime": 1527217954000, 但我无法将它们解析为最新格式,我不确定数据格式是否有问题,是否有任何方法可以解析它们 SimpleDateFormat format = new SimpleDateFormat( "yyyy-MM-dd HH:mm:ss" ); Long te

我有一些价值观

"createTime": 1527217399000,
"updateTime": 1527218049000,

"createTime": 1527217399000,
"updateTime": 1527217954000,
但我无法将它们解析为最新格式,我不确定数据格式是否有问题,是否有任何方法可以解析它们

SimpleDateFormat format =  new SimpleDateFormat( "yyyy-MM-dd HH:mm:ss" );
Long tempTime = 1527217399000L;
Date createDate=format.parse(tempTime.toString());
    System.out.println(createDate.toString());

Exception in thread "main" java.text.ParseException: Unparseable date: 
"1527217399000"
at java.text.DateFormat.parse(DateFormat.java:366)                                                      

如果要从
long
值创建
Date
实例,请使用:

Date createDate=new Date(tempTime);
正如Javadoc提到的:

java.util.Date.Date(长日期)

分配日期对象并将其初始化,以表示自称为“历元”的标准基准时间(即1970年1月1日00:00:00 GMT)以来的指定毫秒数


SimpleDateFormat(“yyyy-MM-dd HH:MM:ss”)
用于将指定格式的
字符串
解析为
日期
(即,如果您想将
字符串
如“2018-05-28 06:12:00”解析为
日期
实例),您确实应该使用Java8中引入的
java.time
API

long createTime = 1527217399000L;
LocalDateTime ldt = Instant.ofEpochMilli(createTime).atZone(ZoneId.systemDefault()).toLocalDateTime();
String format = ldt.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss", Locale.ENGLISH));
System.out.println(format);
在PC上打印
2018-05-25 13:03:19


如果您没有Java 8,有一个API可以用于早期版本的Java

旧的Java.util.Date API是出了名的糟糕,如果您想清楚地决定您使用的日期/时间类型(是否在特定时区等),您应该使用Java.time API

假设(您需要确认)这些毫秒时间戳位于UTC时区,您可以使用这样的代码将其格式化为本地系统时区中的日期/时间

Long tempTime = 1527217399000L;
Instant instant = Instant.ofEpochMilli(tempTime);
ZonedDateTime dateTime = instant.atZone(ZoneId.systemDefault());
System.out.println(dateTime.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));

我也刚刚找到了这个解决方案。LOLI建议您避免使用
SimpleDataFormat
类。它不仅早已过时,而且还出了名的麻烦。今天我们有了更好的解决方案。伙计们,我通过将时间戳转换为Date First来修复它。请不要在问题中发布解决方案,而不是作为答案。你甚至可以接受自己的答案(一段时间后)。当问题是问题所在,答案是答案所在时,我们可以更容易地找到解决问题的方法。