rod*_*ira 3 datetime timestamp
不,我不想用任何特定的语言来做这件事。如果您只有数学,是否可以从时间戳中提取一天中的小时数,如果可以,如何提取?
这是一个示例时间戳1602934899。预期的输出(hour在那个时间戳中)是11.
我正在尝试在没有任何库的情况下完成此任务。另外,我知道闰秒,我不在乎如果我出于我的目的忽略它可能会导致精度不足。我也不关心闰年或时区或夏令时。
( 1_602_934_899L % 86_400 ) / 3_600
Run Code Online (Sandbox Code Playgroud)
11
这是一个示例时间戳 1602934899
用于跟踪日期时间值的此类数字通常是整秒、毫秒、微秒、纳秒、数百微秒或某些此类粒度的计数。
时间计数被定义为自任意纪元参考点以来经过的时间。一对夫妇打这样的点已经使用了各种成功的计算平台。一个更常见的参考点是许多面向 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." ) ;
Run Code Online (Sandbox Code Playgroud)
2020-10-17T11:41:39Z
11
PT445259H41M39S
18552 days, 11 hours, 41 minutes, 39 seconds, 0 nanos.
Run Code Online (Sandbox Code Playgroud)
现在,让我们也用 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 ) ) ;
Run Code Online (Sandbox Code Playgroud)
days = 18552
secondsInPartialDay = 42099
hour = 11
Run Code Online (Sandbox Code Playgroud)
或更紧凑:
( 1_602_934_899L % ( 60 * 60 * 24 ) ) / ( 60 * 60 )
Run Code Online (Sandbox Code Playgroud)
如果您的编译器没有优化掉乘法,请替换为他们的产品以自己进行优化。
| 归档时间: |
|
| 查看次数: |
44 次 |
| 最近记录: |