converting one time zone to another using joda time
i have made a function to convert from one time zone to another by using joda time but the function is not accepting the date
i have passed the following parameters to this function "Asia/Kolkata"
, "UTC"
, "12-Dec-2014 12:30"
. It is throwing the following exception:
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)
Here is the code:
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);
}
DST (day light savings )
i am passing the parameters as (" America/Denver "," GMT "," 09-Mar-2014 02:00 ")on this date the DST will start
for denver
Sunday, 9 March 2014, 02:00:00 clocks are turned forward 1 hour to
Sunday, 9 March 2014, 03:00:00 local daylight time instead
but it is throwing the exception
Exception
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)
You need to parse your date with an inputFormatter
(like the outputFormatter
you've already defined). Something like this
DateTimeFormatter inputFormatter = DateTimeFormat.forPattern(
"dd-MMM-yyyy HH:mm").withZone(fromTimeZone);
DateTime dateTime = inputFormatter.parseDateTime(fromDateTime);
Which I tested, and it outputs
12-Dec-2014 07:00
链接地址: http://www.djcxy.com/p/18526.html
上一篇: OJBC客户端升级后更改了java.sql.Date的行为
下一篇: 使用乔达时间将一个时区转换为另一个时区