使用Joda Time将java.util.Date
转换为不同时区的代码段:
//java.util.Date : 22-1-2015 10:15:55 AM
//System TimeZone : Asia/Singapore
//Convert java.util.Date to America/New_York TimeZone
DateTime dt = new DateTime(date);
DateTimeZone dtZone = DateTimeZone.forID("America/New_York");
DateTime dtus = dt.withZone(dtZone); //21-1-2015 09:15:55 PM - Correct!
//Convert Joda DateTime back to java.util.Date, and print it out
Date dateInUS = dtus.toDate();
System.out.println(dateInUS); //22-1-2015 10:15:55 AM - What???Why???
问题是,如果将Joda DateTime
转换回java.util.Date
,则时区将恢复为系统默认的TimeZone !?
解
在Java中, java.util.Date
不了解时区。如果使用toString()打印java.util.Date
,它将始终使用系统默认的TimeZone打印日期。
要解决此问题,请先将DateTime转换为Joda LocalDateTime
。
DateTime dt = new DateTime(date);
DateTimeZone dtZone = DateTimeZone.forID("America/New_York");
DateTime dtus = dt.withZone(dtZone); //21-1-2015 09:15:55 PM - Correct!
Date dateInUS = dtus.toLocalDateTime().toDate();
System.out.println(dateInUS); //21-1-2015 09:15:55 PM - Correct!
翻译自: https://mkyong.com/java/convert-datetime-to-date-but-timezone-is-missing/