栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

如何获得给定时区的UTC时间“午夜”?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

如何获得给定时区的UTC时间“午夜”?

我认为如果这样做,您可以省去一些方法调用:

>>> from datetime import datetime>>> datetime.now(pytz.timezone("Australia/Melbourne"))  .replace(hour=0, minute=0, second=0, microsecond=0)  .astimezone(pytz.utc)

但是…在代码中,比美观还存在一个更大的问题:在转换为夏令时或从夏令时转换之日,它将给出错误的结果。

这样做的原因是,既没有日期时间构造函数,也没有

replace()
考虑DST更改。

例如:

>>> now = datetime(2012, 4, 1, 5, 0, 0, 0, tzinfo=pytz.timezone("Australia/Melbourne"))>>> print now2012-04-01 05:00:00+10:00>>> print now.replace(hour=0)2012-04-01 00:00:00+10:00 # wrong! midnight was at 2012-04-01 00:00:00+11:00>>> print datetime(2012, 3, 1, 0, 0, 0, 0, tzinfo=tz)2012-03-01 00:00:00+10:00 # wrong again!

但是,文档

tz.localize()
说明:

此方法应用于构造本地时间,而不是将tzinfo参数传递给datetime构造函数。

这样,您的问题就这样解决了:

>>> import pytz>>> from datetime import datetime, date, time>>> tz = pytz.timezone("Australia/Melbourne")>>> the_date = date(2012, 4, 1) # use date.today() here>>> midnight_without_tzinfo = datetime.combine(the_date, time())>>> print midnight_without_tzinfo2012-04-01 00:00:00>>> midnight_with_tzinfo = tz.localize(midnight_without_tzinfo)>>> print midnight_with_tzinfo2012-04-01 00:00:00+11:00>>> print midnight_with_tzinfo.astimezone(pytz.utc)2012-03-31 13:00:00+00:00

但是,不能保证1582年之前的日期。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/652954.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号