我的Date
值为Tue Mar 27 17:57:35 PDT 2018
,我正在尝试将其转换为纳米/纪元时间格式。我试过了
Date ts = data.get("timestamp").getTime()
Instant ts = data.get("timestamp").toInstant()
但这些都不起作用。我进行了广泛的搜索,似乎无法找到一个允许我将此格式转换为纪元的示例。
答案 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);