converting one time zone to another using joda time
我使用joda time创建了一个函数,可以将一个时区转换为另一个时区,但该函数不接受日期。我已经将以下参数传递给这个函数
1 2 3 4 5 6 7 | 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) |
代码如下:
1 2 3 4 5 6 7 8 9 10 | 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(日光节约)我将在此日期将参数传递为("美国/丹佛","格林威治标准时间","2014年3月9日02:00"),DST将开始。对于丹佛2014年3月9日星期日,02:00:00时钟向前拨1小时至2014年3月9日星期日,当地夏令时03:00:00但它抛出了例外例外
1 2 3 4 5 | 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 2 3 | DateTimeFormatter inputFormatter = DateTimeFormat.forPattern( "dd-MMM-yyyy HH:mm").withZone(fromTimeZone); DateTime dateTime = inputFormatter.parseDateTime(fromDateTime); |
我测试过,它输出
1 | 12-Dec-2014 07:00 |
号