线程“main”中的异常java.text.ParseException:Unparseable date:“1527217399000”

时间:2018-05-28 06:54:02

标签: java date

我有一些价值

"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)                                                      

3 个答案:

答案 0 :(得分:4)

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

Date createDate=new Date(tempTime);

正如Javadoc所提到的那样:

  

j ava.util.Date.Date(长日期)

     

分配一个Date对象并对其进行初始化,以表示自标准基准时间(" epoch",即1970年1月1日,00:00:00 GMT)以来指定的毫秒数。

SimpleDateFormat( "yyyy-MM-dd HH:mm:ss" )旨在将String指定的格式解析为Date(即,如果您要解析String,例如" 2018- 05-28 06:12:00"进入Date实例)。

答案 1 :(得分:2)

从2018年开始,你真的应该使用Java 8中引入的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); API

2018-05-25 13:03:19

打印Package(在PC上)

如果您没有Java 8,那么ThreeTen backport会使API可用于早期版本的Java

答案 2 :(得分:2)

旧的java.util.Date API非常糟糕,如果你想明确决定你使用的日期/时间类型 - 无论是在特定的时区等 - 你应该使用java。时间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")));