从数值计算日期

时间:2010-04-21 17:52:34

标签: language-agnostic date time

数字 71867806 代表当天,具有最小的天数对不起家伙,缓存拥有我,实际上是几毫秒!

我怎么能

  • 从中计算当前日期?
  • (或)将其转换为Unix时间戳?

解决方案不应使用语言依赖功能。

谢谢!

6 个答案:

答案 0 :(得分:3)

这取决于:

  • 此数字代表什么单位(天,秒,毫秒,刻度?)
  • 开始日期

总的来说,我不鼓励你试图在这里重新发明轮子,因为你必须自己处理关于约会的每一个例外。

答案 1 :(得分:1)

如果它真的是一个整数天,并且你给出的数字是今天(2010年4月21日,对我来说,因为我正在读这个),那么“零日”(时代)显然是足够71867806天前。我无法想象为什么有人会选择它 - 它大约在196,763年前(约公元前194,753,如果你愿意的话)。这似乎是一个奇怪的时间来挑选我会猜测,这比你告诉我们的更多(也许比你知道的更多)。

在我看来,首先要做的是确认这个数字确实每24小时增加一个。如果可能的话,跟踪它增加的确切时间。

答案 2 :(得分:1)

首先,你只有一点,这还不够。得到“明天”的号码,看看是否是71867806 + 1。如果是,那么你可以放心地认为+1意味着+1天。如果明天 - 今天= 24,那么赔率+1意味着+1小时,显示天数的逻辑只显示“日”部分。如果它是其他东西检查它是否接近(24 * 60,这将是几分钟),(24 * 60 * 60,这将是秒),或(24 * 60 * 60 * 1000,这将是毫秒)。

一旦你知道你正在使用什么类型的单位,你就可以估计多少年前0的“开始”日期。看看它是否与位于http://en.wikipedia.org/wiki/List_of_calendars的任何常见日历系统一致。可能的情况是,您使用的日历不是真正的新创建,而是现有日历的重新实现。如果它看起来很远,它可能是一个朱利安日期,它的第0天相当于BCE 4713 1月1日12:00:00.0 UT星期一。 Julian Dates和Modified Julian日期经常用于天文学计算。

下一个主要目标是找到1970年1月1日00:00:00。如果您可以找到代表该日期的数字,那么您只需从该外国日历系统中减去它,并将剩余部分从已发现的单位转换为毫秒。这将为您提供UNIX时间,然后您可以使用标准UNIX实用程序将其转换为您喜欢的任何时区的时间。

最后,您可能无法100%确定您的转换与手动实现的系统完全相同,但如果您可以通过插入数字并查看它们是否显示为可测试您对日历的假设你预测了。使用这种技术创建一系列测试,帮助您确定此系统如何处理闰年等。请记住,它可能根本无法处理它们!

答案 3 :(得分:1)

现在几点:从午夜开始是71,867,806毫秒?

有:
- 86,400,000毫秒/天
- 3,600,000毫秒/小时
- 60,000毫秒/分钟
- 1,000毫秒/秒

删除并计算这些单位,直到您有时间,如下所示:

多少天?无,因为71,867,806小于86,400,000

多少小时?最多可以删除3,600,000次是19次 71,867,806 - (3,600,000 * 19)= 3,467,806 ms。

多少分钟?最多可以删除60,000次是57次。 3,467,806 - (60,000 * 57)= 47,806 ms

多少秒?最多可以删除1,000次是47次。 47,806 - (1,000 * 47)= 806

所以时间是:19:57:47.806

答案 4 :(得分:0)

如果最小的数字是几天,那确实是很久以前的事了。但是,假设您确定,我可以建议以下shell命令,这对于1970年1月1日之前的日期显然无效:

date -d "@$(echo '(71867806-71853086)*3600*24'|bc)" +%D

或没有bc:

date -d "@$(((71867806 - 71853086) * 3600 * 24))" +%D

答案 5 :(得分:0)

对于这个混乱的问题再次抱歉,我现在得到了解决方案。在js看起来像:

var dayZero = new Date(new Date().getTime() - 71867806 * 1000);