gpt4 book ai didi

datetime - 需要一个公式 : Extracting Years from Seconds Since January 1, 0001 12:00 AM

转载 作者:行者123 更新时间:2023-12-04 04:49:35 25 4
gpt4 key购买 nike

输入:自 0001 年 1 月 1 日以来的秒数

输出:此时间段内的整年数

我开发了一种我认为不是最佳解决方案的算法。我认为应该有一个不涉及循环的解决方案。有关 A) 确定天数和 B) 的算法,请参见代码块 1,根据闰年从总天数中迭代地减去 366 或 365,同时增加总年数

这不像将 DayCount 除以 365.2425 并截断那么简单,因为我们在 0002 年 1 月 1 日遇到了故障点(31536000 秒/(365.2425 * 24 * 60 * 60))= 0.99934。

关于从 0001 年 1 月 1 日 12:00 AM 以来的秒数中提取年份的非循环方法的任何想法?

我需要弄清楚这一点,因为我需要一个嵌入 long (存储秒)的日期,以便我可以以 1 秒的精度跟踪 12+ 百万年。

代码块 1 - 从秒(包括闰年)获取年份的低效算法

        Dim Days, Years As Integer

'get Days
Days = Ticks * (1 / 24) * (1 / 60) * (1 / 60) 'Ticks = Seconds from Year 1, January 1

'get years by counting up from the beginning
Years = 0
While True
'if leap year
If (Year Mod 4 = 0) AndAlso (Year Mod 100 <> 0) OrElse (Year Mod 400 = 0) Then
If Days >= 366 Then 'if we have enough days left to increment the year
Years += 1
Days -= 366
Else
Exit While
End If
'if not leap year
Else
If Days >= 365 Then 'if we have enough days left to increment the year
Years += 1
Days -= 365
Else
Exit While
End If
End If
End While

Return Years

编辑:我的解决方案是跳过在 8 位内嵌入日期的内存节省,并将每个值(秒到年)存储在单独的整数中。这会导致以内存为代价的即时检索。

Edit2:第一次编辑中的错字(8 位)

最佳答案

如果您需要精确到秒,您将需要一个商业级的日期时间包;用简单的算法准确地完成它太复杂了。例如:

  • 很多人注意到我们每 4 年有闰年,但你知道每年能被 100 整除但不能被 400 整除的是 不是 闰年?这甚至在 large commercial products 中也引起了问题。 .
  • 一些国家不遵守夏令时,而那些遵守夏令时的国家do so at different times of the year .这个changes arbitrarily年复一年。
  • 即使在有夏令时的国家,some states/cities随意选择不使用。
  • 1582 年前的年份使用 slightly different calendar
  • the year 1582 中只有 355 天(或 the year 1752 中的 354,取决于国家/地区)。
  • major issues当国家切换时区时。一些国家even lose entire days !
  • 然后是 leap-seconds .一些管理机构任意决定我们是否应该每年在时钟上增加一秒(或有时是两秒)。没有办法提前知道我们什么时候会有下一个闰秒,也没有过去闰秒的模式。

  • 由于这些以及更多的复杂情况,最好不要自己编写代码,除非您可以将需要精确到 的约束放宽。第二个超过1200万年。

    "October 4, 1582 – Saint Teresa of Ávila dies. She is buried the next day, October 15."

    关于datetime - 需要一个公式 : Extracting Years from Seconds Since January 1, 0001 12:00 AM,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2144845/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com