我在服务器上存储了大量数据,而且不同的行包含多达20多种不同格式的日期。我想将它们转换为一种通用格式。我怎样才能做到这一点?我是否需要为每种格式编写单独的函数,或者是否有一些超级函数可以读取任何格式的日期并将其转换为特定格式。
答案 0 :(得分:2)
通常,无法自动解析随机日期格式。例如“02/03/04” - 没有额外的信息,你无法判断这是2004年3月2日,2004年2月3日,2002年3月4日还是其他可能的东西。
但是如果你没有这种问题,在java中你可以使用一个或多个SimpleDateFormat对象,可能还有setLenient(true)。来自javadoc:“通过宽松的解析,解析器可以使用启发式来解释与该对象的格式不完全匹配的输入”,但是你应该检查它是否真的有用。
答案 1 :(得分:1)
在Perl中,Date :: Parse模块在从任意字符串中提取可用日期信息方面做得非常出色。
来自doco(http://metacpan.org/pod/Date::Parse):
以下是已知可使用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
答案 2 :(得分:0)
是的,在java中,简单的dateFormatter需要定义和使用硬编码格式。现在您可以选择在一个代码中容纳所有格式。
oldFormat1;newFormat1 oldFormat2;newFormat2 oldFormat3;newFormat3 oldFormat4;newFormat4 oldFormat5;newFormat5
(在您的情况下,新格式将对所有人都相同)
从java程序中读取属性文件并将这些结果变为变量,比如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
我希望这些步骤能够满足您的要求。