代码之家  ›  专栏  ›  技术社区  ›  elias

从数值计算日期

  •  0
  • elias  · 技术社区  · 16 年前

    数字 七千一百八十六万七千八百零六 代表今天 ,以天为最小单位 . 不好意思,我是caching的,实际上是毫秒!

    我怎么能

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

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

    谢谢!

    6 回复  |  直到 16 年前
        1
  •  3
  •   ntziolis    16 年前

    这取决于:

    • 这个数字代表什么单位(天、秒、毫秒、刻度?)
    • 开始日期是什么时候?

    总的来说,我不鼓励你尝试在这里重新创造方向盘,因为你必须处理与约会有关的每一个例外。

        2
  •  1
  •   Jerry Coffin    16 年前

    如果它真的是一个整数天,而你给出的数字是今天的(2010年4月21日,对我来说,正如我读到的),那么“零日”(时代)显然在71867806天前就足够了。我不太明白为什么会有人选择这个——大概是196763年前(如果你愿意的话,大约是公元前194753年)。这似乎是一个奇怪的足够时间来选择,我想这比你告诉我们的更多(也许比你知道的更多)。

    在我看来,第一件要做的事情是核实数字是否每24小时增加一次。如果可能的话,记录下它增加的确切时间。

        3
  •  1
  •   Edwin Buck    16 年前

    首先,你只有一点,这还不够。得到“明天”的号码,看看是不是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月01日12:00:00.0星期一。朱利安日期和修改过的朱利安日期经常用于天文学计算。

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

    最后,您可能无法百分之百地确定您的转换是否与手工实现的系统完全相同,但如果您可以通过插入数字并查看它们是否如您所预期的那样显示来测试您对日历的假设。使用此技术创建一组测试,这些测试将帮助您确定此系统如何处理闰年等。请记住,它可能根本无法处理这些测试!

        4
  •  1
  •   NealB    16 年前

    什么时候:从午夜开始71867806毫秒?

    有:
    -86400000 ms/天
    -36万ms/小时
    -60000毫秒/分钟
    -1000毫秒/秒

    移除并计数这些单位,直到有时间为止,如下所示:

    多少天?没有,因为71867806小于86400000

    多少小时?最多可移除36万次为19次 71867806-(3600000*19)=3467806毫秒。

    多少分钟?最多可移除60000次,为57次。 3467806-(60000*57)=47806 ms左

    多少秒?最多可移除1000次为47次。 47806-(1000*47)=806

    所以时间是:19:57:47.806

        5
  •  0
  •   Jon    16 年前

    如果最小的数字是以天为单位,那确实是很久以前的事了。但是,如果您对此有把握,我建议您使用以下shell命令,这显然对1970年1月1日之前的日期无效:

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

    或没有BC:

    date -d "@$(((71867806 - 71853086) * 3600 * 24))" +%D
    
        6
  •  0
  •   elias    16 年前

    再次为这个棘手的问题道歉,我现在找到了解决办法。在JS中,它看起来是这样的:

    var dayZero = new Date(new Date().getTime() - 71867806 * 1000);
    
    推荐文章