将纪元时间转换为小时
Converting epoch time to the hour
给定一个纪元时间:例如 (1513213212) 我应该得到 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
.
你的意图是“给定一个纪元时间:例如 (1513213212) 我应该得到 1,因为现在是世界标准时间凌晨 1 点。”您认为以上哪个代码片段最清楚地表达了这一意图?这就是我用来做选择的东西。
虽然 MadProgrammer 在 中肯定是正确的,日期和时间算法很复杂,因此您应该将其留给日期和时间 API,但我相信这是罕见的不太复杂的数学给出正确答案的情况。这取决于忽略闰秒问题是否安全,如果要寻求数学解决方案,您应该确保检查这个假设。反正我个人是不会用的。
给定一个纪元时间:例如 (1513213212) 我应该得到 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
.
你的意图是“给定一个纪元时间:例如 (1513213212) 我应该得到 1,因为现在是世界标准时间凌晨 1 点。”您认为以上哪个代码片段最清楚地表达了这一意图?这就是我用来做选择的东西。
虽然 MadProgrammer 在