Java 将历元时间转换为小时

Java 将历元时间转换为小时,java,datetime,math,epoch,Java,Datetime,Math,Epoch,给定一个大纪元时间:例如(1513212),我应该得到1,因为它现在是UTC的凌晨1点。我该如何把它转换成一天中的一小时?仅仅用数学(除法,mod)就可以做到吗?仅仅用数学几乎是不可能做到的。(闰年和所有)。最好使用已建立的API来完成所有的艰苦工作 您可以使用以下方法来执行此操作 Calendar cal = Calendar.getInstance(); cal.setTimeInMillis(1513213212* 1000L); cal.setTimeZone(TimeZone.getT

给定一个大纪元时间:例如(1513212),我应该得到1,因为它现在是UTC的凌晨1点。我该如何把它转换成一天中的一小时?仅仅用数学(除法,mod)就可以做到吗?

仅仅用数学几乎是不可能做到的。(闰年和所有)。最好使用已建立的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

使用
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

您的意图是“给定一个大纪元时间:例如(1513212)我应该得到1,因为现在是UTC的凌晨1点。”您认为上面哪段代码最清楚地表达了这一意图?这是我用来挑选的


虽然MadProgrammer在日期和时间算法很复杂这一点上肯定是正确的,因此您应该将其留给日期和时间API,但我相信这是很少有不太复杂的数学给出正确答案的情况之一。这取决于是否可以安全地忽略闰秒的问题,如果要进行数学求解,则应确保检查此假设。就我个人而言,无论如何我都不会使用它。

当然,你可以使用数学,但LocalTime类的存在有一个原因“可以只使用数学(除法,mod)来实现吗?”-严格来说,是的,但你不应该,因为日期/时间数学很复杂,并且必须覆盖大量的边缘情况(一天中不一定有24小时,一年中也不一定有365天)。您最好使用Java 8+中提供的日期/时间API,或者如果您真的陷入困境,
Calendar
Java.util.Date
请看一看:关于从Unix时间转换的问题已经很多了。为了您自己的利益,最好先搜索,然后再提问。如果您发现的不足,请解释如何解决,然后我们可以使用gui好得多。例如,请看。请不要教年轻人使用早已过时的
日历
课程。今天我们的课程好多了。当“一天中的某个小时”时,我们对这个问题的解释是否不同被问到了?如果第二个值是151326000,我理解14是正确的答案。您的代码打印2。我不确定OP是否年轻,它只能证明我老了:)。你说得对,我用的是12小时制。还增加了24小时格式。