如何解析已使用不同区域设置格式化的日期

How to parse a date that has been formatted with different locale

我非常聪明 android phone 已经生成了日期字段格式为德语语言环境的电子邮件,例如Date: Di., 20 Dez. 2011 23:28:49 +0100。我将 phone 切换为英语以阻止它这样做,但是已经写了很多电子邮件。

其他一些邮件程序无法处理此问题,因为它没有安装所有这些语言环境。结果它将主要 date-time 设置为 Thu Jan 1 01:00:00 1970 并且当我按日期排序时电子邮件似乎消失了:-( 所以我想通过重写 header 来修复这些电子邮件。但是我怎样才能解析德国日期呢? 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’

有什么想法吗?

如果您安装了 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'))