【发布时间】:2023-03-06 05:43:01
【问题描述】:
如何获取这个日期字符串:
“2015-01-01”
并且,假设它位于特定时区(例如,“US-Mountain”),将其转换为 POSIX 时间戳?
像这样:
magic_parse_function("2015-01-01", pytz.timezone("US-Mountain")) -> 1420095600
我花了相当长的时间搜索文档和这个站点,使用有意识/无意识的日期时间对象,并且我希望找到一个不太疯狂的解决方案。下面的不行,最后两行输出是一样的,应该相隔3600秒:
import datetime
import time
import pytz
timestring = "2015-01-01"
pacific = pytz.timezone("US/Pacific")
mountain = pytz.timezone("US/Mountain")
(year, month, day) = timestring.split('-')
year = int(year)
month = int(month)
day = int(day)
unaware = datetime.datetime(year, month, day, 0, 0, 0, 0)
# aware_pacific = pacific.localize(unaware)
# aware_mountain = mountain.localize(unaware)
aware_mountain = unaware.replace(tzinfo=mountain)
aware_pacific = unaware.replace(tzinfo=pacific)
print time.mktime(aware_pacific.timetuple())
print time.mktime(aware_mountain.timetuple())
【问题讨论】:
-
假设午夜不一定是正确的做法。并非每个时区每天都有当地午夜。有些(如巴西)在夏令时春季前夕从 23:59:59 跳到 01:00:00。
-
另外,看起来你有解决方案,使用
localize。你为什么将它注释掉并使用替换? -
localize() 与 replace() 对输出没有影响。我认为问题在于 timetuple() 丢弃了时区信息,所以我希望有人可以告诉我另一种(即优雅的)方法来从感知的 datetime 对象中获取时间戳。
-
.replace()不正确。见Datetime Timezone conversion using pytz -
与您的具体输入相关:How to get the first datetime of a day?
标签: python datetime time timezone pytz