我已经通过使用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)
答案 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