繁体   English   中英

将纪元时间转换为小时

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM