【发布时间】:2010-11-09 08:08:31
【问题描述】:
我必须将一个非常大的数据集从一个系统迁移到另一个系统。其中一个“源”列包含一个日期,但实际上是一个没有约束的字符串,而目标系统要求一个格式为 yyyy-mm-dd 的日期。
许多(但不是全部)源日期格式为 yyyymmdd。因此,为了将它们强制转换为预期的格式,我会(在 Perl 中):
return "$1-$2-$3" if ($val =~ /(\d{4})[-\/]*(\d{2})[-\/]*(\d{2})/);
当源日期远离“通用”yyyymmdd 时,就会出现问题。目标是在放弃之前尽可能多地挽救约会对象。示例源字符串包括:
21/3/1998, 2004 年 3 月, 2001年, 97 年 3 月 4 日
我可以尝试将我能找到的尽可能多的示例与上面的一系列正则表达式进行匹配。
但是有什么更聪明的方法可以做吗?我不是在重新发明轮子吗?有没有图书馆在做类似的事情?我找不到任何相关的谷歌搜索“原谅日期解析器”。 (任何语言都可以)。
【问题讨论】:
-
3/4/97 - 是 3 月 4 日还是 4 月 3 日?
-
取决于您所在的地区。在美国,那是 3 月 4 日。在美国以外,可能是 4 月 3 日。
-
我想大多数日期工具都可以设置默认选项来处理像 3/4/97 这样的情况。快速浏览一下,下面列出的 Perl 模块中至少有两个具有这样的选项。