java 如何将时间戳转换为日期和时间?
How to convert timestamp into date and time in java?
我在 json 中有一个来自 Linux 服务器的时间戳。我想使用 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");
--代码--
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
当我们想要read/parse一个字符串值作为日期时,我们应该知道该输入字符串的日期格式,否则我们会得到错误的日期值。
batch_date:1419038000
这个值的日期格式是什么?
如果我们想要获取所需格式的日期值,如您的情况 'dd-mm-yyyy hh:mm:ss'。有两种可能的方法。
1) 请求 batch_date 值应采用您要求的格式。或者
2) 如果batch_date value 是另一种格式,我们应该知道原始格式,并使用SimpleDateFormat 解析方法构建具有原始格式的Date 对象,然后使用另一种SimpleDateFormat 格式方法将其转换为所需格式。
没有这样的数据类型
没有"JSON timestamp"这样的东西。 JSON 有 very few defined data types。其中没有日期时间类型。
作为 by Scary Wombat states, your number is apparently a count of whole seconds from the Unix epoch of 1970. The java.util.Date class tracks time as milliseconds since the Unix epoch,而不是整秒。所以你需要乘以 1,000。您还需要处理 long
整数(64 位)而不是 int
(32 位)。将大写字母 L
附加到数字文字,并将任何变量声明为 long
.
java.util.Date/.Calendar 类 是出了名的麻烦。它们现在被 java.time package built into Java 8 and later, and/or the 3rd-party Joda-Time 库所取代。
各种 JSON 处理库支持用于创建 java.time 或 Joda-Time 对象的转换器。或者您可以在代码中执行转换,如下所示。
请注意,java.time 和 Joda-Time 都支持分配时区。下面的代码分配 UTC 用于演示目的,但您可以分配 desired/expected 时区。
乔达时间
这是 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.time of Java 8.
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]
我在 json 中有一个来自 Linux 服务器的时间戳。我想使用 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");
--代码--
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
当我们想要read/parse一个字符串值作为日期时,我们应该知道该输入字符串的日期格式,否则我们会得到错误的日期值。
batch_date:1419038000 这个值的日期格式是什么?
如果我们想要获取所需格式的日期值,如您的情况 'dd-mm-yyyy hh:mm:ss'。有两种可能的方法。
1) 请求 batch_date 值应采用您要求的格式。或者
2) 如果batch_date value 是另一种格式,我们应该知道原始格式,并使用SimpleDateFormat 解析方法构建具有原始格式的Date 对象,然后使用另一种SimpleDateFormat 格式方法将其转换为所需格式。
没有这样的数据类型
没有"JSON timestamp"这样的东西。 JSON 有 very few defined data types。其中没有日期时间类型。
作为long
整数(64 位)而不是 int
(32 位)。将大写字母 L
附加到数字文字,并将任何变量声明为 long
.
java.util.Date/.Calendar 类 是出了名的麻烦。它们现在被 java.time package built into Java 8 and later, and/or the 3rd-party Joda-Time 库所取代。
各种 JSON 处理库支持用于创建 java.time 或 Joda-Time 对象的转换器。或者您可以在代码中执行转换,如下所示。
请注意,java.time 和 Joda-Time 都支持分配时区。下面的代码分配 UTC 用于演示目的,但您可以分配 desired/expected 时区。
乔达时间
这是 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.time of Java 8.
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]