如何在Java中将时间戳转换为纪元/纳秒?

时间:2018-03-29 21:22:07

标签: java time

我的Date值为Tue Mar 27 17:57:35 PDT 2018,我正在尝试将其转换为纳米/纪元时间格式。我试过了

Date ts = data.get("timestamp").getTime()
Instant ts = data.get("timestamp").toInstant()

但这些都不起作用。我进行了广泛的搜索,似乎无法找到一个允许我将此格式转换为纪元的示例。

2 个答案:

答案 0 :(得分:1)

究竟是什么" nano / epoch格式"?只是unix epoch以来纳秒数的数值?

如果是这种情况,您可以使用java.util.Date方法将Instant转换为toInstant(),然后从中获取数值:

Instant instant = date.toInstant();
long secondsSinceEpoch = instant.getEpochSecond();
int nanoSeconds = instant.getNano();

不幸的是,纳秒的总数太大而不能容纳long,所以你需要进入2个单独的字段(如上所述):自纪元以来的秒数和纳秒值( 9个小数位数。)

只需提醒Date具有毫秒精度(仅3个小数位数),因此无法获得纳秒精度。

答案 1 :(得分:0)

导入java.util.concurrent.TimeUnit;

后,请检查以下示例
String target = "2018/03/27 17:57:35 AM";  // Your given date string
long nanoseconds = ...;   // nanoseconds since target time that you want to convert to java.util.Date

long millis = TimeUnit.MILLISECONDS.convert(nanoseconds, TimeUnit.NANOSECONDS); 

DateFormat formatter = new SimpleDateFormat("yyyy/MM/dd hh:mm aaa");
formatter.setTimeZone(TimeZone.getTimeZone("UTC"));
Date date = formatter.parse(target);

long newTimeInmillis = date.getTime() + millis;

Date date2 = new Date(newTimeInmillis);

System.out.println(date2);