如何获取1901年之前的时间戳

3 投票
5 回答
997 浏览
提问于 2025-04-15 14:41

我想准确地计算从1850年1月1日到现在的秒数,使用几种编程语言(JavaScript、C++和Python,别问了,我早就不问这些问题了)。

问题是这些平台把时间戳存储为32位的有符号整数,所以我无法轻松获取1901年之前的时间戳,无法从现在的时间戳中减去等等。那么,我该怎么做才能实现我的目标呢?

5 个回答

1

在WIN32系统下,你可以使用SystemTimeToFileTime这个函数。

FILETIME是一种64位的无符号整数,它记录的是自1601年1月1日(协调世界时)以来的100纳秒间隔的数量。

你可以把两个时间戳转换成FILETIME格式。可以把它转换成一个叫做ULARGE_INTEGER的格式(方法是把t.dwLowDateTime和t.dwHighDateTime相加,后者左移32位),然后进行普通的数学运算来计算时间间隔。

3

一种便携的、与语言无关的方法:

第一步:计算从1850年1月1日00:00到1901年1月1日00:00之间的秒数。把这个数字保存起来(我们称它为M)。

第二步:利用你所用编程语言的功能,计算从1901年1月1日00:00到你想要的其他日期和时间之间的秒数。

第三步:把第二步的结果加上M,然后返回这个结果。如果需要的话,记得把结果转换成长整型(long integer)。

4

在Python中,有一个叫做datetime模块。特别是,里面的日期类会对你有帮助。

from datetime import date
print date(1850, 1, 1).weekday()  # 1, which is Tuesday 
# (Mon is 0)

补充说明

或者,针对你的具体问题,使用timedelta会更有帮助。

from datetime import datetime
td = datetime.now() - datetime(1850, 1, 1)
print (86400*td.days)+td.seconds  # seconds since then till now

撰写回答