不,我不想用任何特定的语言来做这件事。如果您只有数学知识,是否可以从时间戳中提取一天中的小时数?如果可以,如何提取?
例子
这是一个示例时间戳 1602934899
。预期输出(该时间戳中的 小时
)是 11
。
编辑
我试图在没有任何库的情况下完成此任务。另外,我知道闰秒,我不关心如果出于我的目的而忽略它可能导致的精度不足。我也不关心闰年、时区或夏令时。
最佳答案
tl;dr
( 1_602_934_899L % 86_400 ) / 3_600
11
详情
Here's a sample timestamp 1602934899
用于跟踪日期时间值的此类数字通常是整秒、毫秒、微秒、纳秒、数百微秒或类似粒度的计数。
时间计数是自任意 epoch reference point 以来耗时。 . couple dozen such points已被各种成功的计算平台使用。一个更常见的引用点是许多面向 Unix 的系统使用的引用点,UTC 中 1970 年的第一个时刻,1970-01-01T00:00Z。 “在 UTC 中”是指与 UTC 的零小时-分钟-秒的偏移量。
您的数字 1602934899
很可能是自该纪元引用点以来的整秒计数。但不要猜测!请询问您的数据发布者,以确保他们选择的纪元引用点。
确定纪元引用后,进行数学计算。您可以将一天视为恰好 24 小时,因此 60 * 60 * 24 是每天的秒数。将您的输入除以该数字即可得出已经过去的整天数。余数给你最后一天的分数。您需要对余数进行数学运算以获得一天中的时间,除以得到小时、分钟和秒。
因为您只询问了小时数,所以就足够了。由于必须考虑闰年,因此获取日期需要更多工作。但是你的问题陈述只问了几个小时,所以日期是无关紧要的。
闰秒与您的计算无关。每隔几年进行一次闰秒的目的是让时钟慢一点,以便使我们对地球自转(一天中的时间)的跟踪与我们对地球绕太阳自转(年和日,日期)的跟踪同步,使用整洁的正好 60 * 60 * 24 秒的包。因此时钟上的闰秒注定要被日历吞没。
顺便说一下,自行处理日期时间通常是不明智的。日期时间是一个非常棘手的主题。因此,使用适当设计的日期时间框架(例如 Java 中的 java.time 类)是明智的。然而,在您的评论中,您指出了您工作中的异常和极端需求,因此您自己进行此计算可能是合理的。
首先,让 java.time 使用 Java 完成工作语言。
// The easy way.
Instant instant = Instant.ofEpochSecond( 1_602_934_899L ) ;
int h = instant.atOffset( ZoneOffset.UTC ).getHour() ;
Duration d = Duration.between( Instant.EPOCH , instant ) ;
System.out.println( instant ) ;
System.out.println( h ) ;
System.out.println( d ) ;
System.out.println( d.toDaysPart() + " days, " + d.toHoursPart() + " hours, " + d.toMinutesPart() + " minutes, " + d.toSecondsPart() + " seconds, " + d.toNanosPart() + " nanos." ) ;
查看此 code run live at IdeOne.com .
2020-10-17T11:41:39Z
11
PT445259H41M39S
18552 days, 11 hours, 41 minutes, 39 seconds, 0 nanos.
现在,让我们来处理这些数字,同样使用 Java。
// The hard way.
long days = ( 1_602_934_899L / ( 60 * 60 * 24 ) ) ;
long secondsInPartialDay = ( 1_602_934_899L % ( 60 * 60 * 24 ) ) ; // The percent-sign "%" means modulo in Java.
long hour = ( secondsInPartialDay / ( 60 * 60 ) ) ;
查看此 code run live at IdeOne.com .
days = 18552
secondsInPartialDay = 42099
hour = 11
或者更简洁:
( 1_602_934_899L % ( 60 * 60 * 24 ) ) / ( 60 * 60 )
如果您的编译器没有优化掉乘法,请替换为他们的产品以自己进行优化。
关于datetime - 如何手动从时间戳中提取一天中的小时数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67943550/