【发布时间】:2020-04-28 18:17:55
【问题描述】:
我有这个函数可以将日期的字符串类型转换为unix时间戳,如何将结果转换为timeInSeconds和offsetInNanos
DateTimeFormatter formatter = DateTimeFormatter.ofPattern(
"yyyy-MM-dd-HH-mm-ss");
String dateTimeString = "2016-06-21-10-19-22";
LocalDate date = LocalDate.parse(dateTimeString, formatter);
ZonedDateTime resultado = date.atStartOfDay(ZoneId.of("UTC"));
Instant i = resultado.toInstant();
long timeInSeconds = i.getEpochSecond();
int nanoAdjustment = i.getNano();
System.out.println("" + timeInSeconds + " seconds " + nanoAdjustment + " nanoseconds");
result is 1466467200 seconds 0 nanoseconds
but the correct answer seems to be 1466504362 seconds
【问题讨论】:
-
将时间以毫秒为单位转换为 timeInSeconds:除以 1000。
-
要转换为 offsetInNanos,必须知道时区。问题代码中的
Z和UTC都指定偏移量为0,因此没有什么要转换的。getTime()自 UTC 纪元以来始终返回毫秒。 -
使用
java.time并使用ZonedDateTime解析String,将其转换为Instant,您可以使用getEpochSecond()和getNano()... -
@deHaar 为什么不直接使用
Instant.parse("2013-09-29T18:46:19Z")?为什么要绕道ZonedDateTime? -
@Andreas 当然,这将是直接的方式......
标签: java