在 Python 中将 datetime 更改为 Unix 时间戳
Posted
技术标签:
【中文标题】在 Python 中将 datetime 更改为 Unix 时间戳【英文标题】:Change datetime to Unix time stamp in Python 【发布时间】:2012-01-22 11:38:15 【问题描述】:请帮我将日期时间对象(例如:2011-12-17 11:31:00-05:00
)(包括时区)更改为 Unix 时间戳(如 Python 中的函数 time.time())。
【问题讨论】:
可能是***.com/questions/2775864/…的副本 相关:Converting datetime.date to UTC timestamp in Python 【参考方案1】:另一种方式是:
import calendar
from datetime import datetime
d = datetime.utcnow()
timestamp=calendar.timegm(d.utctimetuple())
Timestamp 是 unix 时间戳,它显示与 datetime 对象 d 相同的日期。
【讨论】:
注意:它会删除几分之一秒。要保留微秒,请使用:(d - datetime(1970,1,1)).total_seconds()
【参考方案2】:
import time
import datetime
dtime = datetime.datetime.now()
ans_time = time.mktime(dtime.timetuple())
【讨论】:
本地时间可能不明确,例如,在 DST 过渡结束期间(“回退”)。timetuple()
将 tm_isdst
设置为 -1
,这迫使 mktime()
猜测,即有 50% 的可能性它会出错。使用 UTC 时间或感知日期时间对象。【参考方案3】:
不完整的答案(不涉及时区),但希望有用:
time.mktime(datetime_object.timetuple())
**根据以下评论编辑**
在我的程序中,用户输入日期时间,选择时区。 ...我创建了一个时区列表(使用 pytz.all_timezones)并允许用户从该列表中选择一个时区。
Pytz 模块提供了必要的转换。例如。如果dt
是您的datetime
对象,并且用户选择了“美国/东部”
import pytz, calendar
tz = pytz.timezone('US/Eastern')
utc_dt = tz.localize(dt, is_dst=True).astimezone(pytz.utc)
print calendar.timegm(utc_dt.timetuple())
参数is_dst=True
用于解决夏令时结束时1 小时间隔内的模糊时间(请参阅此处http://pytz.sourceforge.net/#problems-with-localtime)。
【讨论】:
我真的需要处理时区问题。 输入的日期时间对象是否包含正确的 tzinfo?或者,如果没有,你怎么知道你对哪个时区感兴趣? 是的。在我的程序中,用户输入日期时间,选择时区。我使用 python 语言,创建了一个时区列表(使用 pytz.all_timezones)并允许用户从该列表中选择一个时区。我的问题是如何将日期时间与时区 id 一起转换为 unix 时间戳。以上所有答案都不能解决我的问题。请帮帮我。以上是关于在 Python 中将 datetime 更改为 Unix 时间戳的主要内容,如果未能解决你的问题,请参考以下文章
在 DB2 中将数据类型从 DateTime 更改为 Time 会出错