根据语言环境,日期格式不正确

时间:2021-04-22 11:08:30

标签: python date locale

我需要 python 中的语言环境日期格式。由于您可以检查 %x 格式的 python datetime module link,该示例清楚地表明我的日期结果来自 None 语言环境。但是在下面的代码中,locale 被打印为 en_US。

import locale
from datetime import datetime

default_locale = locale.getdefaultlocale()[0]
print(default_locale)  #en_US

date_val = "2021-12-20"
date1 = datetime.strptime(date_val, "%Y-%m-%d").date()
print(date1) #2021-12-20
print(date1.strftime("%x"))  #12/20/21
# Expected 12/20/2021

我也尝试过 babel 但它产生了相同的结果:

from babel.dates import format_date
date_val = "2021-12-20"
default_locale = locale.getdefaultlocale()[0]  #en_US
val_date = format_date(date_val, format='short', locale=default_locale)
print(val_date)  #12/20/21

缺少的部分是什么

2 个答案:

答案 0 :(得分:1)

locale docs中有解释:

<块引用>

根据 POSIX,一个程序没有调用 setlocale(LC_ALL, '') 使用可移植的 'C' 语言环境运行。调用 setlocale(LC_ALL, '') 让它使用 LANG 变量定义的默认语言环境。

因此,如果您什么都不做,您将获得基本的 'C' 语言环境。

如果您调用 setlocale(LC_ALL, ''),程序将切换到由环境确定的默认语言环境。如果您想知道它是哪一个,请使用 getdefaultlocale

第三个选项是显式设置语言环境。

答案 1 :(得分:0)

正如你从上面的评论中看到的,@VPfB 提供的解决方案解决了这个问题,但另一个 当在 Windows 上设置区域设置时,区域设置值是 English_United States.1252 而不是 en_US

local.setlocale(locale.LC_ALL,"English_United States.1252")