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

如何在Java中将时间戳转换为历元/纳秒?,java,time,Java,Time,我有一个日期值为2018年3月27日星期二17:57:35 PDT,我正在尝试将其转换为nano/epoch时间格式。我试过了 Date ts = data.get("timestamp").getTime() Instant ts = data.get("timestamp").toInstant() 但这些都不管用。我已经广泛地搜索过了,似乎找不到一个可以将这种格式转换为epoch的示例 导入java.util.concurrent.TimeUnit后,请检查下面的示例 String ta

我有一个
日期
值为
2018年3月27日星期二17:57:35 PDT
,我正在尝试将其转换为nano/epoch时间格式。我试过了

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

但这些都不管用。我已经广泛地搜索过了,似乎找不到一个可以将这种格式转换为epoch的示例

导入
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);
“纳米/新纪元格式”到底是什么?只是unix时代以来纳秒数的数值

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

Instant instant = date.toInstant();
long secondsSinceEpoch = instant.getEpochSecond();
int nanoSeconds = instant.getNano();
不幸的是,纳秒的总数太大,无法放入
长的
,因此您需要进入两个单独的字段(如上所述):自历元起的秒数和纳秒值(9个小数位数)


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

如果您所获得的只是时间到秒精度,则只能将其转换为具有秒精度的时间戳。我的意思是,你可以把它乘以1e9;但这样做并不能获得任何精度。准确地说,这种长型号可以在
2262-04-11T23:47:16.854Z
之前适应纳秒级,因此在那之前使用它仍然是安全的。