如何解析已使用不同语言环境格式化的日期

Posted

技术标签:

【中文标题】如何解析已使用不同语言环境格式化的日期【英文标题】:How to parse a date that has been formatted with different locale 【发布时间】:2015-12-08 15:32:43 【问题描述】:

我非常智能的 android 手机生成了日期字段格式为德语区域设置的电子邮件,例如Date: Di., 20 Dez. 2011 23:28:49 +0100。我将手机切换到英语以阻止它这样做,但已经写了一些电子邮件。

其他一些邮件程序无法处理这个问题,因为它没有安装所有这些语言环境。结果,它将主要日期时间设置为Thu Jan 1 01:00:00 1970,当我按日期排序时,电子邮件似乎消失了:-( 所以我想通过重写标题来修复这些电子邮件。但是我怎样才能解析德国日期呢? date 命令支持输出语言环境 (date +%c) 但似乎忽略了输入语言环境:

$ date -d "08 Dec 2015"
Tue Dec  8 00:00:00 CET 2015
$ LC_TIME=de_DE.utf8 date -d "08 Dez 2015"
date: invalid date ‘08 Dez 2015’

有什么想法吗?

【问题讨论】:

Can't do it with date: from the manual: "input current must be in locale independent format" 【参考方案1】:

如果您安装了 Python 和 de 语言环境,一种方法是调用

% python /path/to/convert.py "08 Dez 2015"
2015-12-08 00:00:00

convert.py 是这个 python 脚本:

import sys, locale, datetime as DT
locale.setlocale(locale.LC_ALL, 'de_DE.utf8')
print(DT.datetime.strptime(sys.argv[1], '%d %b %Y'))

【讨论】:

以上是关于如何解析已使用不同语言环境格式化的日期的主要内容,如果未能解决你的问题,请参考以下文章

如何在不同的语言环境中对日期对象进行 strftime? [复制]

如何从日期选择器设置语言环境格式?

如何使日期与语言环境无关?

如何根据语言环境仅显示日期的日期和月份?

语言环境的 Java 日期格式

C++ - 如何以独立于平台、线程安全的方式以用户首选的日期/时间语言环境格式格式化文件的最后修改日期和时间