[英]Converting date time to epoch time losing an hour in Java/scala
[英]Converting epoch time to the hour
给定一个纪元时间:例如(1513213212)我应该从现在的凌晨1点开始获得1。 我如何将它转换成一天中的小时? 是否有可能只使用数学(除法,mod)?
使用java.time
,现代Java日期和时间API,也称为JSR-310:
LocalTime timeOfDay = Instant.ofEpochSecond(1513213212L)
.atOffset(ZoneOffset.UTC)
.toLocalTime();
System.out.println(timeOfDay);
int hourOfDay = timeOfDay.getHour();
System.out.println(hourOfDay);
这打印:
01:00:12
1
即使你只是想做数学,我仍然更喜欢使用标准库方法:
long epochSeconds = 1513213212L;
// convert the seconds to days and back to seconds to get the seconds in a whole number of days
long secondsInWholeDays = TimeUnit.DAYS.toSeconds(TimeUnit.SECONDS.toDays(epochSeconds));
long hourOfDay = TimeUnit.SECONDS.toHours(epochSeconds - secondsInWholeDays);
System.out.println(hourOfDay);
这也打印1
。
你的意图是“给定一个纪元时间:例如(1513213212)我应该得到1,因为现在是凌晨1点UTC。”你认为上述哪些代码片段最明确地表达了这个意图? 这就是我用来挑选的东西。
虽然MadProgrammer在他/她的评论中肯定是正确的,但日期和时间算术很复杂,因此你应该把它留给日期和时间API,我相信这是一个罕见的情况,其中没有太复杂的数学给出了正确的答案。 这取决于忽略闰秒问题是安全的,如果要求数学解决方案,你应该确保检查这个假设。 就个人而言,无论如何我都不会用它。
通过仅使用数学来完成它几乎是不可能的。 (闰年和所有)。 最好使用既定的API来完成所有艰苦的工作。
您可以使用以下方法执行此操作。
Calendar cal = Calendar.getInstance();
cal.setTimeInMillis(1513213212* 1000L);
cal.setTimeZone(TimeZone.getTimeZone("UTC"));
System.out.println(cal.get(Calendar.HOUR));//12 hour clock
System.out.println(cal.get(Calendar.HOUR_OF_DAY));//24 hour clock
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.