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/Oslo
UTC + 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 次 |
最近记录: |