我有dt = datetime(2013,9,1,11)个,我想获得这个DateTime对象的Unix时间戳.

当我做(dt - datetime(1970,1,1)).total_seconds()时,我得到了时间戳1378033200.

当用datetime.fromtimestamp把它转换回来时,我得到了datetime.datetime(2013, 9, 1, 6, 0).

时间不匹配.我在这里错过了什么?

推荐答案

你错过的是时区.

大概你离UTC还有五个小时,所以2013-09-01T11:00:00本地时间和2013-09-01T06:00:00Z是同一时间.

你需要阅读datetime篇文档中的前几篇,它们解释了时区和"天真"和"感知"对象.

如果原始原始日期时间是UTC,那么恢复它的方法是使用utcfromtimestamp而不是fromtimestamp.

另一方面,如果您原始的日期时间是本地的,那么一开始就不应该从其中减go UTC时间戳;取而代之的是使用datetime.fromtimestamp(0).

或者,如果有aware datetime对象,则需要在两侧使用本地(aware)历元,或者显式地与UTC进行转换.

如果您拥有或可以升级到Python3.3或更高版本,那么只需使用timestamp方法,而不是试图自己解决这些问题,就可以避免所有这些问题.即使你没有,你也可以考虑borrowing its source code.

(如果你能等Python3.4发布,看起来PEP 341很可能会进入最终版本,这意味着我和J.F.Sebastian在 comments 中谈到的所有东西都应该只用stdlib就可以做到,并且在Unix和Windows上都能以同样的方式工作.)

Python相关问答推荐

如何修复fpdf中的线路出血

如何才能将每个组比上一组增加N %?

Python panda拆分列保持连续多行

查找下一个值=实际值加上使用极点的50%

连接两个具有不同标题的收件箱

如何在类和classy-fastapi -fastapi- followup中使用FastAPI创建路由

根据二元组列表在pandas中创建新列

使用@ guardlasses. guardlass和注释的Python继承

当从Docker的--env-file参数读取Python中的环境变量时,每个\n都会添加一个\'.如何没有额外的?

使用groupby Pandas的一些操作

如何请求使用Python将文件下载到带有登录名的门户网站?

如何获得每个组的时间戳差异?

把一个pandas文件夹从juyter笔记本放到堆栈溢出问题中的最快方法?

ThreadPoolExecutor和单个线程的超时

名为__main__. py的Python模块在导入时不运行'

isinstance()在使用dill.dump和dill.load后,对列表中包含的对象失败

让函数调用方程

在www.example.com中使用`package_data`包含不包含__init__. py的非Python文件

考虑到同一天和前2天的前2个数值,如何估算电力时间序列数据中的缺失值?

Python Tkinter为特定样式调整所有ttkbootstrap或ttk Button填充的大小,适用于所有主题