88 time epoch java-8 java-time
如何Long从LocalDateTime或的实例中提取纪元值LocalDate?我尝试了以下内容,但它给了我其他结果:
LocalDateTime time = LocalDateTime.parse("04.02.2014 19:51:01", DateTimeFormatter.ofPattern("dd.MM.yyyy HH:mm:ss"));
System.out.println(time.getLong(ChronoField.SECOND_OF_DAY)); // gives 71461
System.out.println(time.getLong(ChronoField.EPOCH_DAY)); // gives 16105
Run Code Online (Sandbox Code Playgroud)
我想要的只是1391539861本地日期时间的值"04.02.2014 19:51:01".我的时区是Europe/OsloUTC + 1,夏令时.
nos*_*sid 128
这些类LocalDate和LocalDateTime不包含有关的信息时区或偏移时间纪元以来,几秒钟就没有这个信息ambigious.但是,对象有几种方法可以通过传递ZoneId实例将它们转换为带时区的日期/时间对象.
LOCALDATE的
LocalDate date = ...;
ZoneId zoneId = ZoneId.systemDefault(); // or: ZoneId.of("Europe/Oslo");
long epoch = date.atStartOfDay(zoneId).toEpochSecond();
Run Code Online (Sandbox Code Playgroud)
LocalDateTime
LocalDateTime time = ...;
ZoneId zoneId = ZoneId.systemDefault(); // or: ZoneId.of("Europe/Oslo");
long epoch = time.atZone(zoneId).toEpochSecond();
Run Code Online (Sandbox Code Playgroud)
Wer*_*sch 24
'自从unix epoch以来的Millis'代表了一个瞬间,所以你应该使用Instant类:
private long toEpochMilli(LocalDateTime localDateTime)
{
return localDateTime.atZone(ZoneId.systemDefault())
.toInstant().toEpochMilli();
}
Run Code Online (Sandbox Code Playgroud)
您需要的转换需要UTC/Greewich或时区的偏移量.
如果你有一个偏移,有一个专门的方法在LocalDateTime此任务:
long epochSec = localDateTime.toEpochSecond(zoneOffset);
Run Code Online (Sandbox Code Playgroud)
如果你只有一个,ZoneId那么你可以ZoneOffset从ZoneId:
ZoneOffset zoneOffset = ZoneId.of("Europe/Oslo").getRules().getOffset(ldt);
Run Code Online (Sandbox Code Playgroud)
但您可以通过ZonedDateTime更简单的方式找到转换:
long epochSec = ldt.atZone(zoneId).toEpochSecond();
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
91989 次 |
| 最近记录: |