1

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

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

  • 2013 年 5 月 16 日 19:27:12 CEST
  • 2013 年 5 月 14 日星期二 13:15:00 +0200
  • 2013-05-20T12:01:57Z
  • 13/11/2012 15:30:00
  • 11.11.2013
  • 1970-01-01T00:00:00.000Z

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

谢谢你!

4

5 回答 5

4

您可以遍历所有格式并尝试解析,忽略异常。如果格式不适合,则抛出异常。

类似的答案

于 2013-05-20T12:22:40.480 回答
1

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

于 2013-05-20T12:31:39.773 回答
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 相关的日期!

于 2013-05-20T13:04:33.810 回答
1

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

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

于 2013-05-20T13:14:12.903 回答
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);

详细信息可在下面提到的链接中找到

简单日期格式

于 2013-05-20T12:38:39.643 回答