使用joda时间将一个时区转换为另一个时区

时间:2014-01-21 18:55:50

标签: java datetime jodatime

我已经通过使用joda时间创建了从一个时区转换为另一个时区的功能,但该功能不接受日期
我已将以下参数传递给此函数"Asia/Kolkata""UTC""12-Dec-2014 12:30"。抛出以下异常:

Exception in thread "main" java.lang.IllegalArgumentException: Invalid format: "12-Dec-2014 12:32" is malformed at "-Dec-2014 12:32"
at org.joda.time.format.DateTimeFormatter.parseMillis(DateTimeFormatter.java:752)
at org.joda.time.convert.StringConverter.getInstantMillis(StringConverter.java:65)
at org.joda.time.base.BaseDateTime.<init>(BaseDateTime.java:150)
at org.joda.time.DateTime.<init>(DateTime.java:265)
at Dtime.convertTimeZones(Dtime.java:17)
at Dtime.main(Dtime.java:9) 

以下是代码:

public static String convertTimeZones( String fromTimeZoneString, 
    String toTimeZoneString, String fromDateTime) {
         DateTimeZone fromTimeZone = DateTimeZone.forID(fromTimeZoneString);
         DateTimeZone toTimeZone = DateTimeZone.forID(toTimeZoneString);
         DateTime dateTime = new DateTime(fromDateTime, fromTimeZone);

         DateTimeFormatter outputFormatter = 
             DateTimeFormat.forPattern("dd-MMM-yyyy HH:mm").withZone(toTimeZone);
         return outputFormatter.print(dateTime);
}

夏令时(日光节省)
我将参数传递给(“ America / Denver ”,“ GMT ”,“ 09-Mar-2014 02:00 ”)此日期 DST 将开始 for denver
星期日,2014年3月9日,02:00:00时钟转发1小时到
2014年3月9日星期日,03:00:00当地日光时间而不是 但它正在抛出例外 例外

Exception in thread "main" java.lang.IllegalArgumentException: Cannot parse "09-Mar-2014 02:00": Illegal instant due to time zone offset transition (America/Denver)
    at org.joda.time.format.DateTimeParserBucket.computeMillis(DateTimeParserBucket.java:390)
    at org.joda.time.format.DateTimeFormatter.parseDateTime(DateTimeFormatter.java:849)
    at timeZone.convertTimeZones(timeZone.java:23)
    at timeZone.main(timeZone.java:14)

1 个答案:

答案 0 :(得分:2)

您需要使用inputFormatter解析日期(例如您已定义的outputFormatter)。像这样的东西

DateTimeFormatter inputFormatter = DateTimeFormat.forPattern(
    "dd-MMM-yyyy HH:mm").withZone(fromTimeZone);
DateTime dateTime = inputFormatter.parseDateTime(fromDateTime);

我测试了它,并输出

12-Dec-2014 07:00