gpt4 book ai didi

math - 以数学方式从UNIX时间戳计算天数?

转载 作者:行者123 更新时间:2023-12-04 10:29:21 30 4
gpt4 key购买 nike

我如何以数学方式从Unix时间戳计算天数,而无需使用任何函数和简单的数学公式。

1313905026-> 8(今天08/21/2011)

最佳答案

没有简单的公式可以做到这一点。您需要减去自该纪元以来的年数(占leap年),这可能需要循环或某种离散计算。然后使用某种类型的循环减去当前年份每个月的秒数。您剩下的是当前到该月的秒数。

我会做这样的事情。

x = ...//the number of seconds
year = 1970

while (x > /*one year*/){
x = x - /*seconds in january, and march-december*/
if(year % 4 == 0){
x -= /*leapeay seconds in february*/
}else{
x -= /*regular seconds in february*/
}
}

//Then something like this:

if(x > /*seconds in january*/){
x -= /*seconds in january*/
}
if(x > /*seconds in february*/){
x -= /*seconds in january*/
}

.
.
.

//After that just get the number of days from x seconds and you're set.

编辑

为了简化起见,我建议使用日期函数,但这是一个可能的无循环替代答案,以防万一有人需要或希望进一步开发它。

首先,将t设为自该纪元以来的当前时间(以秒为单位)。

令F为四年中的秒数。那是三个常规年和一个leap年。那应该是:126230400。

现在,如果您拿走F贡献的所有时间,您将得到余数:y。

因此y = n%F。

现在有几种情况:
1. y小于一年
2. y小于两年
3. y小于三年且小于两个月
4. y小于三年且大于两个月
5. y小于四年

请注意,1972年是a年,因此,如果您从1970年开始算起是四,那么您离开的任何地方都将是两年中的a年。

令jan,feb,febLY,mar,may,...,dec为每个月的秒数(您需要计算出秒数)。

d表示当前月份的天数,D表示一天中的秒数(86400)。
y表示正常年份的秒数,yLY表示a年的秒数。

y = (t % F)
if(y < Y){
if(y > jan){
y -= jan
}
if(y > feb){
y -= feb
}
.
.
.
d = y % D
}
else if(y < 2 * y){
y = y - Y
if(y > jan){
y -= jan
}
if(y > feb){
y -= feb
}
.
.
.
d = y % D
}
else if(y < 2 * y + yLY){
y = y - 2 * Y
if(y > jan){
y -= jan
}
if(y > febLY){
y -= febLY
}
.
.
.
d = y % D
}
else{
y = y - 2 * Y - yLY
if(y > jan){
y -= jan
}
if(y > feb){
y -= feb
}
.
.
.
d = y % D
}

未经测试。另外,由于地球不会每24小时精确旋转1圈,因此他们偶尔会调整时间。您需要进行一些研究。

关于math - 以数学方式从UNIX时间戳计算天数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7136385/

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