我有一些价值
"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)
答案 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")));