Java 如何使用Joda Time将不同时区中的字符串转换为UTC

Java 如何使用Joda Time将不同时区中的字符串转换为UTC,java,jodatime,Java,Jodatime,我成功地将不同时区中的有效日期字符串转换为如下所示 String DATE_FORMAT = "yyyy-MM-dd HH:mm:ss"; DateTimeFormatter DATETIME_FORMATTER = DateTimeFormat.forPattern(DATE_FORMAT); DateTimeZone dateTimeZone = DateTimeZone.forID("-03:00"); //date is 2000-01-01 00:00:00 -03:00 DateTi

我成功地将不同时区中的有效日期字符串转换为如下所示

String DATE_FORMAT = "yyyy-MM-dd HH:mm:ss";
DateTimeFormatter DATETIME_FORMATTER = DateTimeFormat.forPattern(DATE_FORMAT);
DateTimeZone dateTimeZone = DateTimeZone.forID("-03:00");
//date is 2000-01-01 00:00:00 -03:00
DateTime date =    DATETIME_FORMATTER.withZone(dateTimeZone).parseDateTime("2000-01-01 00:00:00"));
System.out.println("Current date is: " + date.toString());
//now convert to UTC
DateTime convertedDate = date.toDateTime(DateTimeZone.UTC);
System.out.println("Converted date: " + date.toString());
结果是

Current date is: 2000-01-01T00:00:00.000-03:00
Converted date: 2000-01-01T03:00:00.000Z

有没有更短/更好的方法?我希望最终日期是一个对象。

您可以使用转换任何
DateTime
的时区。如果输入字符串没有指定时区偏移量,那么您必须在添加时添加它,这样您的代码就相当理想了。

与示例代码相比的一个改进可能是将硬编码的“-3:00”偏移量替换为时区名称。这将使Joda有时间对任何可能的(DST)进行调整。有关详细信息,请参见文件

这:

与此相反:

DateTimeZone dateTimeZone = DateTimeZone.forID("-03:00");
时区列表(可能已过时,请阅读注释):

DateTimeZone dateTimeZone = DateTimeZone.forID("-03:00");