Java解析不同的日期类型

时间:2013-05-20 12:20:04

标签: java parsing date

是否有一些简单的方法可以在不使用日期字符串的情况下解析java中不同类型的日期?

我必须处理6种不同类型的日期:

  • 2013年5月16日19:27:12 CEST
  • Tue,2013年5月14日13:15:00 +0200
  • 2013-05-20T12:01:57Z
  • 13/11/2012 15:30:00
  • 二〇一三年十一月一十一日
  • 1970-01-01T00:00:00.000Z

我不知道日期是从服务器以一种格式到达另一种格式......

谢谢你!

5 个答案:

答案 0 :(得分:4)

您可以迭代所有格式并尝试解析,忽略该异常。如果没有格式适合,则抛出异常。

similar answer

答案 1 :(得分:1)

标准API的最着名的替代品是Joda-Time。 JSR 310也改进了Java SE 7的日期/时间API

答案 2 :(得分:1)

我认为没有一种实际的“简单”方式来处理这种不同的日期格式。 如果您可以选择将“标准日期格式”指向服务器,这将是一种简单的方法。

一种常见的方法是为您必须处理的每个“怪异”日期格式构建一个DateParser。以下是使用Joda Time的第一次约会示例:

String date1 = "16 May 2013 19:27:12 CEST";
        DateTimeFormatter fmt = new DateTimeFormatterBuilder()
            .appendDayOfMonth(2)
            .appendLiteral(' ')
            .appendMonthOfYearShortText()
            .appendLiteral(' ')
            .appendYear(4, 4)
            .appendLiteral(' ')
            .appendHourOfDay(2)
            .appendLiteral(":")
            .appendMinuteOfDay(2)
            .appendLiteral(":")
            .appendSecondOfDay(2)
            .appendLiteral(' ')
            .appendLiteral("CEST")
            .toFormatter();

        DateTime parseDateTime = fmt.parseDateTime(date1);

        System.out.println(parseDateTime);

我希望这可以帮助您为其他案例构建DateParsers。请记住 - 始终保存与UTC相关的日期!

答案 3 :(得分:1)

要详细说明股票“使用Joda-Time”答案,在Joda-Time中,您可以为6种格式中的每种格式创建DateTimeParser,然后将它们附加到单个DateTimeFormatter

请参阅此问题的接受答案: Using Joda Date & Time API to parse multiple formats

答案 4 :(得分:0)

以下是示例代码,对于日期字符串,如2001-07-04T12:08:56.235-0700,我们需要使用以下格式“yyyy-MM-dd'T'HH:mm:ss.SSSZ”

SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSZ");
Date date = simpleDateFormat.parse("2001-07-04T12:08:56.235-0700");
System.out.println(date);

详情请见以下链接

SimpleDateFormat