如何获得超过1901年的时间戳

时间:2009-09-29 18:41:33

标签: javascript c++ python timestamp

我试图找到准确计算从1850年1月1日到现在用几种语言(JavaScript,C ++和Python [甚至不问,我很久以前就不再问这些问题]的秒数])。

问题是平台将时间戳存储为32位有符号整数,因此我无法获得超过1901的日期的时间戳,以便轻松地从等等中减去当前时间戳。那么我该怎么做我想做的事情?

5 个答案:

答案 0 :(得分:4)

在python中,有datetime module。具体来说,日期类会有所帮助。

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

答案 1 :(得分:3)

便携式,语言无关的方法:

步骤1.计算01/01/1850 00:00和01/01/1901 00:00之间的秒数。在某个地方保存这个号码(称之为M)

步骤2.使用可用的语言功能计算01/01/1901 00:00与您想要的任何其他日期和时间之间的秒数。

步骤3.返回步骤2 + M的结果。如果需要,请记住将结果转换为长整数。

答案 2 :(得分:1)

在WIN32下,您可以使用 SystemTimeToFileTime

FILETIME 是一个64位无符号整数,它计算自1601年1月1日(UTC)以来100纳秒间隔的数量。

您可以将两个时间戳转换为FILETIME。您可以将其转换为ULARGE_INTEGER(t.dwLowDateTime + t.dwHighDateTime<< 32),并进行常规算术来测量间隔。

答案 3 :(得分:0)

为什么不使用日期对象而不是整数,至少要获得一个起点。

function secondsSince(D){
 D= new Date(Date.parse(D));
 D.setUTCHours(0,0,0,0); 
 return Math.floor((new Date()-D)/1000);
}

//使用日期进行测试

var daystring ='1850年1月1日', ss = secondsSince(daystring), diff = ss /(60 * 60 * 24 * 365.25);

警告('一直是'+ ss + '自00:00:00(格林威治标准时间)起'秒天+上的秒数 '\ n \ n那是关于'+ diff.toFixed(2)+'years。');

答案 4 :(得分:0)