我必须将一个非常大的数据集从一个系统迁移到另一个系统。其中一个“源”列包含日期,但实际上是一个没有约束的字符串,而目标系统要求格式为yyyy-mm-dd的日期。“智能”(原谅)日期解析器?
许多(但不是全部)源日期格式为yyyymmdd。所以,强迫他们到期望的格式,我这样做(在Perl):
return "$1-$2-$3" if ($val =~ /(\d{4})[-\/]*(\d{2})[-\/]*(\d{2})/);
当源日期移动从“通用” YYYYMMDD远就会出现问题。目标是在放弃之前挽回尽可能多的日期。示例源字符串包括:
21/3/1998,2004年 月, 2001年, 97年3月4日
我可以尝试尽可能多的实例匹配我可以经常连续发现如上面的表达式。
但是有什么更聪明的做法吗?我是不是重新发明轮子?有没有一个图书馆可以做类似的事情?我找不到任何相关的谷歌搜索“原谅日期解析器”。 (任何语言都可以)。
3/4/97 - 是3月4日还是4月3日? – 2009-07-09 10:50:16
取决于您所在的地区。在美国,那是3月4日。在美国之外,可能在4月3日。 – 2009-07-09 16:42:35
我会想象大多数日期工具将有一种方法来设置如何处理像3/4/97的情况下的默认选项。匆匆一瞥,下面列出的至少两个Perl模块都有这样的选项。 – Telemachus 2009-07-09 17:24:51