如何使用Joda包在Java中将ISO 8601日期时间转换为特定的日期时间格式

3
我将使用org.joda.time.DateTime;类来将ISO 8601日期时间转换为"yyyy-MM-dd HH:mm:ss.SSS"格式。具体示例为“2017-02-07T00:00:00.000+05:30”。以下是代码片段:
String dateTimePattern = "yyyy-MM-dd HH:mm:ss.SSS";
DateTimeFormatter dtf = DateTimeFormat.forPattern(inputDateTimePattern);
DateTime jodatime = dtf.parseDateTime("2017-02-07T00:00:00.000+05:30");;
System.out.println("Converted datetime is: ",jodatime.toString(dtf))

但我收到一个错误,提到

java.lang.IllegalArgumentException: 无效格式:在".T00:00:00.000+05:30"处格式错误

如何在Java中将ISO 8601日期时间格式转换为所需格式?

4个回答

1

简短概述

Joda-Time被java.time类所取代。

OffsetDateTime.parse( "2017-02-07T00:00:00.000+05:30" )

java.time

Joda-Time项目现已进入维护模式,其团队建议迁移到java.time类。

在java.time中,您的输入字符串可以直接解析为OffsetDateTime对象。无需指定格式化模式。

OffsetDateTime odt = OffsetDateTime.parse( "2017-02-07T00:00:00.000+05:30" );

时区是特定地区偏移历史的记录。因此,如果您确定所需时区,则最好使用。

ZoneId z = ZoneId.of( "Asia/Kolkata" );  // Or "America/Montreal", etc.
ZonedDateTime zdt = odt.atZoneSameInstant();

Joda-Time

在Joda-Time中,您可以以两种方式之一解析带有UTC偏移的标准ISO 8601格式字符串:

  • 构造函数
    new DateTime( "2017-02-07T00:00:00.000+05:30" ) ;
  • 静态parse方法
    DateTime.parse( "2017-02-07T00:00:00.000+05:30" )

这两种方法不相同!请参阅parse方法的类文档:

然而,当该方法接收到带有偏移量的日期时间字符串时,偏移量会被直接解析和存储。因此,DateTime.parse("2010-06-30T01:20+02:00")和new DateTime("2010-06-30T01:20+02:00"))是不相等的。通过该方法生成的对象的时区为DateTimeZone.forOffsetHours(2)。通过构造函数生成的对象的时区为DateTimeZone.getDefault()。


0

0

看起来你在使用DateTimeFormat时感到困惑了。给定的时间字符串不是yyyy-MM-dd HH:mm:ss.SSS格式的。因此你得到了预期的异常。

        SimpleDateFormat target = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS");
        SimpleDateFormat source = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssXXX");
        Date date=source.parse("2017-02-07T00:00:00+05:30");
        System.out.println(target.format(date));  // prints 2017-02-07 00:00:00.000

这段代码将日期格式化为yyyy-MM-dd HH:mm:ss.SSS


0
请使用以下方法:
public static Calendar toCalendar(String iso8601string) {
    DateTime dt = new DateTime(iso8601string);
    Date date = new Date(dt.getMillis());
    Calendar calendar = Calendar.getInstance();
    calendar.setTime(date);
    return calendar;
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接