我在服务器上存储了大量数据,它的不同行包含多达 20 多种不同格式的日期。我想将它们转换为一种通用格式。我怎样才能做到这一点?我是否需要为每种格式编写单独的函数,或者是否有一些超级函数可以读取任何格式的日期并将其转换为特定格式。
3 回答
通常不可能自动解析随机日期格式。例如“02/03/04” - 如果没有额外信息,您无法判断这是 2004 年 3 月 2 日、2004 年 2 月 3 日、2002 年 3 月 4 日还是其他日期。
但是如果你没有这种问题,在java中你可以使用一个或多个SimpleDateFormat对象,可能使用setLenient(true)。来自 javadoc:“通过宽松的解析,解析器可能会使用启发式方法来解释与该对象的格式不完全匹配的输入”,但您应该检查这是否真的有帮助。
In Perl, the Date::Parse module does a pretty spectacularly good job of extracting useable date information from arbitrary strings.
From the doco (http://metacpan.org/pod/Date::Parse) :
Below is a sample list of dates that are known to be parsable with Date::Parse
1995:01:24T09:08:17.1823213 ISO-8601
1995-01-24T09:08:17.1823213
Wed, 16 Jun 94 07:29:35 CST Comma and day name are optional
Thu, 13 Oct 94 10:13:13 -0700
Wed, 9 Nov 1994 09:50:32 -0500 (EST) Text in ()'s will be ignored.
21 dec 17:05 Will be parsed in the current time zone
21-dec 17:05
21/dec 17:05
21/dec/93 17:05
1999 10:02:18 "GMT"
16 Nov 94 22:28:20 PST
是的,在 java 中,简单的 dateFormatter 需要定义和使用硬编码格式。现在您可以选择在一个代码中容纳所有格式。
- 创建一个可配置的属性/CSV 文件,其中每种格式都可以保存,例如:
oldFormat1;newFormat1 oldFormat2;newFormat2 oldFormat3;newFormat3 oldFormat4;newFormat4 oldFormat5;newFormat5
(在您的情况下,新格式对所有人都是相同的)
从 java 程序中读取属性文件并将这些结果放入变量中,例如 a
Map<String><String>
将上述对作为键值。使用SimpleDateFormat#format格式化日期
DateFormat originalFormat = new SimpleDateFormat(old_format, Locale.ENGLISH); DateFormat targetFormat = new SimpleDateFormat(new_format); Date date = originalFormat.parse("August 21, 2012"); // parse date from database, where date format is MMMM dd, yyyy String formattedDate = targetFormat.format(date); // 20120821
我希望这些步骤能满足您的要求。