2017-10-19 75 views
1

我试图将时间戳转换为人类日期。我这样做是为了获得消息的本地时间并将其作为人类日期插入到我们的数据库中。Datetime fromtimestamp返回错误的年份

目前,如果我使用下面的代码:

from datetime import datetime, timedelta 
    reference_date1 = datetime(2001, 1, 1, 0, 0, 0) 
    delta_since_reference = timedelta(seconds=530023775) 
    print str(reference_date1 + delta_since_reference) 

我得到:

2017-10-18 12:49:35 

其中有日期是正确的,但时间是错误的。 如果我使用:

print datetime.fromtimestamp(530023775) 

我得到:

1986-10-18 14:49:35 

其中这里的时间不正确的,但今年是错误的。 有2种方法可以合并2个结果吗? 还是有更好的方法来转换时间戳?

回答

1

至于你要转换的时间戳记,以“人”的日期,尝试这样做:

from datetime import datetime 

your_time_stamp = int("1284101485") 
human_date = datetime.fromtimestamp(your_time_stamp).strftime('%Y-%m-%d %H:%M:%S') 

此解决方案已采取here(另一个stackoverflow帖子)。

+0

印刷1986年10月18日14时49分35秒,而不是2017年10月18日14时49分35秒 –

+0

您的脚本打印'1986-10-18 14:49:35'因为你的时间戳530023775表示这个日期。我想你想得到当前日期,所以试着这样做:'datetime.now()。strftime('%Y-%m-%d%H:%M:%S')' –

+0

谢谢我使用它。 –

1

在你第一次尝试使用2001年1月1日作为基准日:

reference_date1 = datetime(2001, 1, 1, 0, 0, 0) 

凡为根据Python docsdatetime.fromtimestamp

返回对应的POSIX时间戳本地日期,例如由time.time()返回。 [..]请注意,非POSIX系统,包括闰秒在他们的时间戳的概念,闰秒被忽略fromtimestamp()

重点煤矿

而一个POSIX时间戳是:

Unix时间(也称为POSIX时间或epoch时间)[引文需要]是一个描述时间点的系统,定义为从00:00:00开始经过的秒数。Coordinated世界时间(UTC),星期四,1970年1月1日

所以:

  • 的日期,因为不同的参考日期是不同的。简单地决定要坚持
  • 我的电脑上的时间是相同的(我用的是POSIX兼容的Mac系统)是什么标准,但如果你使用非POSIX系统
他们可能会在PC上有所不同

解决方案:

  • 如果您只需要打印日期

    datetime.now()

  • 如果您需要的日期都为时间戳和打印

    datetime.fromtimestamp(time.time())

2

在使用fromtimestamp()计算日期时间时,您忘记添加reference_date1

这里是更新的代码

from datetime import datetime, timedelta 
reference_date1 = datetime(2001, 1, 1, 0, 0, 0) 
delta_since_reference = timedelta(seconds=530023775) 
print(str(reference_date1 + delta_since_reference)) 
print(datetime.fromtimestamp(530023775 + float(datetime.strptime(str(reference_date1), "%Y-%m-%d %H:%M:%S").strftime('%s')))) 

它打印

2017-10-18 12:49:35 
2017-10-18 12:49:35  
+0

第二次打印是打印错误的时间,正确的时间应该是14:49:35 –

+0

我得到Traceback“'datetime.datetime'对象没有属性'timestamp'”for print(datetime.fromtimestamp(530023775 + reference_date1.timestamp ())) –

+0

你确定你应该得到14小时吗? '(530023775 /(60 * 60))%24 = 12.83'这表示起飞后的剩余小时数为12.83。因此,从您参考日期的时间是00:00开始,小时数为12是有意义的。至于Traceback错误,事实证明datetime.datetime.timestamp仅在Python 3中可用。我将更新我的答案以与Python 2兼容。 – user2471379