如何在java中将时间戳转换为正常的日期和时间?

时间:2015-06-23 05:28:51

标签: java date datetime timestamp

我在json中有一个来自Linux服务器的时间戳。我想使用Java将其转换为简单的日期时间格式。

我需要以下格式的日期和时间:dd-mm-yyyy hh:mm:ss

这是我的JSON数据:

[
  { 
    "batch_date": 1419038000
  }, 
  {
    "batch_date": 1419037000
  }
]

3 个答案:

答案 0 :(得分:7)

批日期

"batch_date": 1419038000, 

看起来像是纪元的秒,

所以

new Date (batch_date * 1000); 

然后使用SimpleDateFormat应该做的伎俩

SimpleDateFormat sfd = new SimpleDateFormat("dd-MM-yyyy HH:mm:ss");

- 代码 -

    long batch_date = 1419038000; 
    Date dt = new Date (batch_date * 1000); 

    SimpleDateFormat sfd = new SimpleDateFormat("dd-MM-yyyy HH:mm:ss");
    System.out.println(sfd.format(dt));

- 输出 -

20-12-2014 10:13:20

答案 1 :(得分:4)

无此类数据类型

没有“JSON时间戳”这样的东西。 JSON有very few defined data types。其中没有日期时间类型。

正如Scary Wombat的correct Answer所述,你的数字显然是1970年Unix时代的整秒数.java.util.Date类跟踪自Unix epoch以来的毫秒数,而不是整秒。所以你需要乘以1,000。您还需要处理long整数(64位)而不是int(32位)。将大写L附加到数字文字,并将任何变量声明为long

java.util.Date / .Calendar类非常麻烦。它们现在被Java 8及更高版本中内置的java.time package和/或第三方Joda-Time库取代。

各种JSON处理库支持用于创建java.time或Joda-Time对象的转换器。或者您可以在代码中执行转换,如下所示。

请注意,java.time和Joda-Time都支持分配时区。以下代码为演示目的分配UTC,但您可以指定所需/预期的区域。

约达时间

以下是Joda-Time 2.8.1中的一些代码,显示输入数字的使用为秒或毫秒。

long secondsSinceEpoch = 1419038000L;
DateTime dateTimeSeconds = new DateTime( secondsSinceEpoch , DateTimeZone.UTC );
DateTime dateTimeMillis = new DateTime( secondsSinceEpoch * 1000L , DateTimeZone.UTC );  // Note the crucial "L" appended to the numeric literal.

转储到控制台。

System.out.println( "dateTimeSeconds: " + dateTimeSeconds );
System.out.println( "dateTimeMillis: " + dateTimeMillis );

跑步时。

dateTimeSeconds: 1970-01-17T10:10:38.000Z
dateTimeMillis: 2014-12-20T01:13:20.000Z

java.time

与上面类似的代码,但使用Java 8的java.time。

Instant instant = Instant.ofEpochSecond( 1419038000L );
ZonedDateTime zdtUtc = ZonedDateTime.ofInstant( instant , ZoneOffset.UTC );
ZonedDateTime zdtMontréal = zdtUtc.withZoneSameInstant( ZoneId.of( "America/Montreal" ) );

转储到控制台。

System.out.println( "zdtUtc: " + zdtUtc );
System.out.println( "zdtMontréal: " + zdtMontréal );

跑步时。

zdtUtc: 2014-12-20T01:13:20Z
zdtMontréal: 2014-12-19T20:13:20-05:00[America/Montreal]

答案 2 :(得分:-3)

当我们想要读取/解析字符串值作为日期时,我们应该知道该输入字符串的日期格式,否则我们将得到错误的日期值。

batch_date:1419038000 这个值的日期格式是什么?

如果我们想要获得所需格式的日期值,就像你的情况'dd-mm-yyyy hh:mm:ss'一样。有两种可能的方式。

1)请求batch_date值应采用您所需的格式。或

2)如果batch_date值是另一种格式,我们应该知道原始格式,并使用SimpleDateFormat parse方法构建一个具有原始格式的Date对象,然后使用另一种SimpleDateFormat格式方法将其转换为所需格式。