我有一个来自Linux服务器的JSON时间戳,我想使用Java将其转换为简单的日期时间格式。
我需要以下格式的日期和时间:dd-mm-yyyy hh:mm:ss
这是我的JSON数据:
[
{
"batch_date": 1419038000
},
{
"batch_date": 1419037000
}
]
我有一个来自Linux服务器的JSON时间戳,我想使用Java将其转换为简单的日期时间格式。
我需要以下格式的日期和时间:dd-mm-yyyy hh:mm:ss
这是我的JSON数据:
[
{
"batch_date": 1419038000
},
{
"batch_date": 1419037000
}
]
"batch_date": 1419038000,
看起来是从纪元开始算的秒数,
所以
new Date (batch_date * 1000);
那么使用SimpleDateFormat应该能解决问题。
SimpleDateFormat sfd = new SimpleDateFormat("dd-MM-yyyy HH:mm:ss");
-- code --
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
HH
,不是 hh
。 - Jon Skeet“JSON时间戳”这种东西并不存在。JSON仅有极少定义的数据类型,其中没有日期时间类型。
正如Scary Wombat所说的正确答案,你的数字显然是从1970年Unix纪元以来的整秒数计算而来。java.util.Date类将时间跟踪为自1970年Unix纪元以来的毫秒数,而不是整秒数。因此,您需要乘以1000。您还需要处理long
整数(64位),而不是int
(32位)。在数字文字后添加大写字母L
,并将任何变量声明为long
。
java.util.Date/.Calendar类非常麻烦。它们现在被Java 8及更高版本内置的java.time包和/或第三方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]
当我们想要将字符串值解析为日期时,我们应该知道输入字符串的日期格式,否则我们将得到错误的日期值。
batch_date:1419038000 这个值的日期格式是什么?
如果我们想要以所需格式(例如:'dd-mm-yyyy hh:mm:ss')获取日期值,有两种可能的方法。
1)请求batch_date值应该是您需要的格式。或者
2)如果batch_date值是另一种格式,我们应该知道原始格式,并使用SimpleDateFormat解析方法构建一个带有原始格式的Date对象,然后使用另一个SimpleDateFormat格式化方法将其转换为所需格式。