【问题标题】:Python Xlsxwriter - Make dates respect different locale formatPython Xlsxwriter - 使日期尊重不同的语言环境格式
【发布时间】:2020-05-21 20:01:54
【问题描述】:

使用 Xlsx 编写器,我想编写符合操作系统区域/语言设置的区域设置格式的日期。例如,加拿大的操作系统设置的默认格式是'yyyy-mm-dd',而在德国,它是'dd.mm.yy'。如何使日期响应?

我已经阅读了文档,但仍然无法弄清楚。

这是我尝试过的:

import xlsxwriter
from datetime import date

workbook = xlsxwriter.Workbook('sample.xlsx')
worksheet = workbook.add_worksheet()

my_date = date(2020, 1, 31)
my_format = workbook.add_format({'num_format': 'mm/dd/yyyy'})
worksheet.write(0, 0, my_date, my_format)

workbook.close()

  • 在设置为加拿大英语的 Excel 中,我预计 '2020-01-31' 但得到 '01-31-2020'

  • 在设置为德语的 Excel 中,我希望得到 '31.01.20' 但得到的是 '01.31.2020'。

所以它设法使用了正确的分隔符,但其余的都是错误的。


提前致谢

【问题讨论】:

  • 我有一个文件,我使用 xlsxwriter 以美国日期格式 (mm/dd/yy) 格式化了日期。当我用我的电脑打开它时,日期显示为欧洲格式(dd/mm/yy),而当我从我工作的笔记本电脑打开它时,它们显示为我们的日期格式。所以我认为它与机器的语言环境设置有关。

标签: python date format xlsxwriter


【解决方案1】:

第一个问题是是否可以在 Excel 中设置日期格式,该格式将更改为以您想要的方式匹配区域设置。我不这么认为。

如果您在 Excel 中设置任何“mm-dd-yyyy”样式格式,那么您将在其他语言环境中获得该格式(分隔符除外)。

因此,如果在 Excel 中不可能,则在 XlsxWriter 中也不可能(同样,如果在 Excel 中可能,则在 XlsxWriter 中也一样)。

一种部分解决方法是在 XlsxWriter 中使用in-built Excel number formats 之一。这些是数字索引而不是字符串:

import xlsxwriter
from datetime import date

workbook = xlsxwriter.Workbook('sample.xlsx')
worksheet = workbook.add_worksheet()

my_date = date(2020, 1, 31)
my_format = workbook.add_format({'num_format': 14})
worksheet.write(0, 0, my_date, my_format)

workbook.close()

此日期(2020 年 12 月 31 日)在加拿大语言环境中提供 20-12-31,在德国语言环境中提供 31.12.20。但是,没有任何内置格式可以提供 4 位数的年份。

另请参阅 XlsxWriter 文档中的 Number Format CategoriesNumber Formats in different locales

【讨论】:

  • 事实证明,使用 {'num_format': 14} 是正确的解决方案。现在,加拿大语言环境显示 2020-01-31,德国显示 31.01.20。这与在 Excel 中更改格式的行为相同。感谢您的帮助。
猜你喜欢
  • 1970-01-01
  • 2020-06-10
  • 2010-11-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多