R S*_*ahu 12 python datetime python-3.x
datetime.now()并且datetime.today()在我的计算机上以UTC返回时间,即使文档说他们应该返回当地时间.
这是我运行的脚本:
#!/usr/bin/python
import time
import datetime
if __name__ == "__main__":
print(datetime.datetime.now())
print(datetime.datetime.today())
print(datetime.datetime.fromtimestamp(time.time()))
Run Code Online (Sandbox Code Playgroud)
这是输出:
2017-11-29 22:47:35.339914
2017-11-29 22:47:35.340399
2017-11-29 22:47:35.340399
Run Code Online (Sandbox Code Playgroud)
date之后运行的输出是:
Wed, Nov 29, 2017 3:47:43 PM
Run Code Online (Sandbox Code Playgroud)
为什么我的安装返回UTC时间?
我该怎么办才能让这些功能返回当地时间?
PS我们在MST,这是UTC-7.
PS 2我意识到有一些方法可以将UTC时间转换为本地时间,例如在使用python标准库将python UTC datetime转换为本地日期时所解释的那些方法?.但是,我试图了解基本问题的原因,而不是寻找一种方法来修补我自己的代码中的问题.
回应@jwodder的评论:
执行的输出
print(time.altzone)
print(time.timezone)
print(time.tzname)
Run Code Online (Sandbox Code Playgroud)
是:
-3600
0
('Ame', 'ric')
Run Code Online (Sandbox Code Playgroud)
正如您在答案中所述,TZ环境变量是此处的关键.在unix类型的系统上,它支持更多"友好"的值,如"US/Pacific"或者"America/Denver",但在Windows上,它不支持.虽然它在Windows上不可用,但该time.tzset功能的文档描述了设置TZ以获得所需内容所需的格式.它......不漂亮.但它有效:
C:\Users\zorb>set TZ=MST+07MDT,M3.2.0,M11.1.0
C:\Users\zorb>python.exe
>>> import time
>>> time.tzname
('MST', 'MDT')
>>> import datetime
>>> datetime.datetime.now()
datetime.datetime(2018, 2, 9, 16, 27, 7, 164062)
Run Code Online (Sandbox Code Playgroud)
(这是太平洋时间的15:27.)这种格式的结构是:
白天时间开始和结束的格式为:
M ("以月为基础")还有一些选项可以指定日光时间开始和结束的时间(但默认为02:00:00,在这种情况下是不必要的)和日光时间的偏移量(但默认为1小时,因此也没有必要).
(编辑)事实证明这实际上是一个glibc功能,而不是直接的python功能.glibc文档中有更详细的信息.
| 归档时间: |
|
| 查看次数: |
852 次 |
| 最近记录: |