所以我写了一个工具,可以使用基于python 3.52和Qt5的图形用户界面从文件中读取时间。最小操作
datetime.datetime.strptime('Tue', '%a')
在孤立的环境中工作,输出"1900-01-01 00:00:00"。但是,当我运行以下最小示例
时import sys
import datetime as datetime
from PyQt5 import QtWidgets
if __name__ == '__main__' :
print(datetime.datetime.strptime('Tue', '%a'))
app = QtWidgets.QApplication(sys.argv)
print(datetime.datetime.strptime('Tue', '%a'))
#sys.exit(app.exec_())
我得到了输出
1900-01-01 00:00:00
Traceback (most recent call last):
File "/home/user/gui/testfile.py", line 11, in <module>
print(datetime.datetime.strptime('Tue', '%a'))
File "/usr/lib/python3.5/_strptime.py", line 510, in _strptime_datetime
tt, fraction = _strptime(data_string, format)
File "/usr/lib/python3.5/_strptime.py", line 343, in _strptime
(data_string, format))
ValueError: time data 'Tue' does not match format '%a'
因此,对strptime例程的第一次调用工作正常,但是在创建QApplication类之后,它不再工作了。请注意,进一步使用QApplication来构建GUI并使用它做许多复杂的事情可以很好地工作。目前唯一不能工作的是strptime你知道哪里出错了吗?
我可以重现您的问题:在调用QtWidget之后,
print(datetime.datetime.strptime('Tue', '%a'))
导致错误。
如果我在QtWidget
之后执行 print(datetime.datetime.strptime('Die', '%a'))
这工作。
我位于瑞士,所以Die在德语中相当于Tue。
似乎Qt在某种程度上对区域设置有影响,因为%A和%A计算当地工作日的名称(Datetime)。也许Qt专家可以更详细地解释正在进行的事情。
详细说明Patrick的回答,我现在找到了一种方法来撤销QT强制的本地化
import sys
import datetime as datetime
import locale
from PyQt5 import QtWidgets
## Start the QT window
print(datetime.datetime.strptime('Tue', '%a'))
app = QtWidgets.QApplication(sys.argv)
locale.setlocale(locale.LC_TIME, "en_GB.utf8")
print(datetime.datetime.strptime('Tue', '%a'))
#sys.exit(app.exec_())