如何测试给定的时间戳是以秒还是毫秒为单位?

问题描述 投票:27回答:4

假定给定变量,它包含一个UNIX时间戳,但是未知是秒还是毫秒格式,我想分配给秒格式的变量

例如:

unknown = 1398494489444 # This is millisecond
t = ???

更新:我知道不加限制就不可能说出来,所以就这样

  • current_ts-86400 * 365

Assume current_ts = current unix timestamp

python datetime timestamp unix-timestamp
4个回答
52
投票

如果您convert带有x位数的最大时间戳值,以毫秒为单位,则您将得到如下所示:

  • 9999999999999(13 digits)意味着星期六2286年11月20日17:46:39 UTC
  • 999999999999(12位数字)表示2001年9月9日星期日UTC
  • 99999999999(11位数字)表示1973年3月3日星期六UTC

您的时间戳可以早于2001年吗?如果不是,我认为您可以安全地检查数字是否有13位或更多-如果是,则为毫秒,如果没有,则为秒。当然,这只有在以秒为单位的时间戳也有13位数字时才起作用,这意味着以毫秒为单位的时间戳将有16位数字:

  • 1000000000000000(16位数字)表示周五9月27日33658 01:46:40,但是到那时我将生活在半人马座Alpha系统的行星上,时间标准可能会有所改变:)

P.S。如果您的时间戳不能追溯到1973年,则可以将条件放宽到12位或更多。条件只有在满足以下条件时才可以使用:

  • 100000000000000(15位数字)表示星期三11月16 5138 09:46:40因为以秒为单位的数字将有12位数字,并且将与您的条件重叠]

26
投票

冒着吸引选票的风险,我想记录在案,说不做。

[关于物理量单位的假设是一个可怕的想法-它导致了Mars Meteorological Orbiter的破坏(推力的计算单位为磅,发动机预计为牛顿。推力不足-以及轨道飞行器被烧毁了在大气中)。

如果您对数字的大小有很好的了解,则应该能够对单位进行“有根据的猜测”。例如,如果我告诉您我的体重为230,您可以看着我,并认为“我敢打赌这是磅,而不是公斤”。同样,如果您将我的生日时间戳转换为日期(假设它以秒为单位),而事实证明它是将来的200年,则可以合理地假设“秒”是错误的单位。

但是这样做很危险。

仍然-如果必须这样做,那么一般而言,我建议采用以下方法:

  1. 给出所有可能的单位,将其转换为“合理的”比例(例如,将时间戳转换为年/月/日)。
  2. 查看获得的值。其中哪个是“最有可能的”。对于日期,您可能有个好主意(此计算机投入使用的日期:1970年还是2012年?等)
  3. 选择最有可能的值
  4. 在某处记录这就是您所做的-因此,如果此决定的结果证明是错误的,则可以跟踪错误]]
  5. 最后一件事很重要-它可以让您从错误中学习。例如,如果您的时间戳记告诉您有关彗星何时下次出现的信息,则可以打印

彗星的下一个预期出现:2546年12月29日(假设:X的时间戳记以秒为单位)

这样,会有一些“回来”。通常,“ 记录您的假设

”不仅是一个很好的建议,而且在任何精确的科学领域中都是必不可少的。

最后,将时间戳从ms转换为s是通过将数字除以1000来实现的。但是我确定您知道这一点。


26
投票

由于您的限制,检测毫秒时间戳很简单。即使过去一年的时间戳仍然比当前时间戳大。


0
投票
© www.soinside.com 2019 - 2024. All rights reserved.