python datetime %b 解释器的语言问题

问题描述 投票:0回答:2

当我运行以下脚本时

import matplotlib.pyplot as plt
import datetime as dt
date = dt.datetime.strptime('02-Jan-2008 10:09:00', '%d-%b-%Y %H:%M:%S')
print(date)
fig = plt.figure()
date2 = dt.datetime.strptime('02-Jan-2008 10:09:00', '%d-%b-%Y %H:%M:%S')
print(date2)

在我的 anaconda python 3.8.13 中,我收到以下消息

2008-01-02 10:09:00 回溯(最近一次调用最后一次): 文件“./prova.py”,第 17 行,位于 date2 = dt.datetime.strptime('02-Jan-2008 10:09:00', '%d-%b-%Y %H:%M:%S') 文件“/home/grieco/anaconda3/lib/python3.8/_strptime.py”,第 568 行,在 _strptime_datetime 中 tt,分数,gmtoff_fraction = _strptime(data_string,格式) 文件“/home/grieco/anaconda3/lib/python3.8/_strptime.py”,第 349 行,在 _strptime 中 raise ValueError("时间数据 %r 与格式 %r 不匹配" % ValueError:时间数据“02-Jan-2008 10:09:00”与格式“%d-%b-%Y %H:%M:%S”不匹配

注意 date 和 date2 是完全相同的命令。由于我不知道的原因,当我调用命令

plt.figure()
时,日期解码过程会切换到西班牙语(我的 ubuntu 安装的语言)。即使我关闭该图,问题仍然存在。我还没有找到控制它的方法。你能帮我吗?

我期望相同的输出,但我收到错误

python datetime strptime
2个回答
1
投票

您可以使用模块

locale
在代码中更改它

import locale
import datetime 

print('current:', locale.setlocale(locale.LC_ALL))
print( datetime.datetime.today().strftime('%d-%b-%Y %H:%M:%S') )


print('new:', locale.setlocale(locale.LC_ALL, 'en_GB.utf-8'))
print(datetime.datetime.today().strftime('%d-%b-%Y %H:%M:%S') )

Linux
上,您可以使用
locale -a
查看所有允许的值。
如果您没有
en_GB.UTF-8
那么您可能需要在系统中安装它。


顺便说一句:

某些程序允许在执行代码之前直接设置值(即在

ls
之前)

LANG=gb_GB.UTF-8 ls -al
LANG=pl_PL.UTF-8 ls -al

如果您已安装,第二行会以波兰语显示

ls

您还可以使用

C
(用于编程语言
C
),这对于按不同顺序对元素进行排序非常有用。

LANG=C ls -al

0
投票

谢谢弗拉斯。问题解决了,但是…… 如果我输入代码行

locale.setlocale(locale.LC_ALL, 'en_GB.utf-8')

在我打电话之前

plt.figure()

本次调用后,设置返回到上一个。当您在循环中递归生成图形时,这有点无聊,因为您必须在整个循环期间调用它。 最好的问候

© www.soinside.com 2019 - 2024. All rights reserved.