有没有一些简单的方法可以在不使用日期字符串的情况下解析 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
我不知道日期是否会以一种格式或另一种格式从服务器到达...
谢谢你!
您可以遍历所有格式并尝试解析,忽略异常。如果格式不适合,则抛出异常。
标准 API 的最著名替代品是 Joda-Time。JSR 310 也是 Java SE 7 的改进日期/时间 API
我认为没有一种真正的“简单”方法来处理这种不同的日期格式。如果您可以选择将“标准日期格式”固定到服务器,那将是一种简单的方法。
一种常见的方法是为您必须处理的每种“怪异”日期格式构建一个 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 相关的日期!
要详细说明库存的“使用 Joda-Time”答案,在 Joda-Time 中,您可以DateTimeParser
为 6 种格式中的每一种创建一个,然后将它们附加到单个DateTimeFormatter
.
请参阅此问题的公认答案: Using Joda Date & Time API to parse multiple formats
这是示例代码,对于像 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);
详细信息可在下面提到的链接中找到