我在json中有一个来自Linux服务器的时间戳。我想使用Java将其转换为简单的日期时间格式。
我需要以下格式的日期和时间:dd-mm-yyyy hh:mm:ss
这是我的JSON数据:
[
{
"batch_date": 1419038000
},
{
"batch_date": 1419037000
}
]
答案 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 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格式方法将其转换为所需格式。