将各种不同的日期格式转换为一种常见的日期格式Java或Perl

时间:2013-09-16 04:03:54

标签: java perl

我在服务器上存储了大量数据,而且不同的行包含多达20多种不同格式的日期。我想将它们转换为一种通用格式。我怎样才能做到这一点?我是否需要为每种格式编写单独的函数,或者是否有一些超级函数可以读取任何格式的日期并将其转换为特定格式。

3 个答案:

答案 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需要定义和使用硬编码格式。现在您可以选择在一个代码中容纳所有格式。

  1. 创建一个可配置的属性/ CSV文件,其中每种格式都可以保存为:
  2. oldFormat1;newFormat1
    oldFormat2;newFormat2
    oldFormat3;newFormat3
    oldFormat4;newFormat4
    oldFormat5;newFormat5
    

    (在您的情况下,新格式将对所有人都相同)

    1. 从java程序中读取属性文件并将这些结果变为变量,比如Map<String><String>将上述对保留为键值。

    2. 使用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
      
    3. 我希望这些步骤能够满足您的要求。