我试图找到准确计算从1850年1月1日到现在用几种语言(JavaScript,C ++和Python [甚至不问,我很久以前就不再问这些问题]的秒数])。
问题是平台将时间戳存储为32位有符号整数,因此我无法获得超过1901的日期的时间戳,以便轻松地从等等中减去当前时间戳。那么我该怎么做我想做的事情?
答案 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)
egenix日期时间也值得关注 http://www.egenix.com/products/python/mxBase/mxDateTime/