如何在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
之前适应纳秒级,因此在那之前使用它仍然是安全的。