python - 如何获取一天的第一个日期时间?

标签 python datetime python-3.x timezone pytz

使用 pytz 和 Python 3.4,如何在给定的时区(比如 'America/圣保罗')?

最佳答案

使用localize()方法附加时区:

from datetime import datetime
import pytz # $ pip install pytz

tz = pytz.timezone('America/Sao_Paulo')    
naive = datetime(2014, 10, 19)
aware = tz.localize(naive, is_dst=None)

如果你运行代码;它会生成 NonExistentTimeError。如何处理此错误取决于应用程序,例如,在午夜附近获取一些有效的本地时间:

aware = tz.normalize(tz.localize(naive, is_dst=False))

或者您可以逐分钟增加时间,直到您获得有效的本地(圣保罗)时间:

from datetime import datetime, timedelta
import pytz # $ pip install pytz

tz = pytz.timezone('America/Sao_Paulo')
d = naive = datetime(2014, 10, 19)
while True:
    try:
        aware = tz.localize(d, is_dst=None)
    except pytz.AmbiguousTimeError:
        aware = tz.localize(d, is_dst=False)
        assert tz.localize(d, is_dst=False) > tz.localize(d, is_dst=True)
        break
    except pytz.NonExistentTimeError:
        d += timedelta(minutes=1) # try future time
        continue
    else:
        break

结果:

>>> aware
datetime.datetime(2014, 10, 19, 1, 0, tzinfo=<DstTzInfo 'America/Sao_Paulo' BRST-1 day, 22:00:00 DST>
>>> aware.strftime('%Y-%m-%d %H:%M:%S %Z%z')
'2014-10-19 01:00:00 BRST-0200'

注意:第一个有效时间是当天的01:00。时区比 UTC 晚两个小时(local = utc - 2)。

关于python - 如何获取一天的第一个日期时间?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27770504/

相关文章:

python - Pandas Dataframe Groupby 多列

python - PySpark 2.2.0 : 'numpy.ndarray' object has no attribute 'indices'

python - Pandas any() 返回 false 且存在 true 值

javascript - 获取 HH :MM:SS time string in javascript 的一种黑客方法

python-3.x - Gnuradio可能的路径问题阻止使用python程序

python - 在 Tensorflow 中,如何将张量/数组添加到已包含多个张量/数组的张量/数组中。 tf.concat 和 st.stack 需要相同的形状

Python 和 pytest 测试

javascript - javascript 以小时和分钟为单位格式化时间

python - 保持对象在 python 的另一个程序中使用它们

python - 如何在 numpy python3+ 中为数组列表创建 dtype