可能的重复项:
时区转换
我必须使用 Java 代码将给定的时间和时区与其他时区进行转换。
例如:
我还必须通过考虑 DST(夏令时)来转换加拿大时区的28 Sept 2:00 PM IST
。
有人可以帮助我吗?
尝试getTimeZone()
并与Calendar
类一起setTimeZone()
TimeZone oztz = TimeZone.getTimeZone("Canada/Atlantic");
Calendar datetime = Calendar.getInstance( oztz );
请参阅所有时区的此链接:
http://snipplr.com/view/23131/timezone-enum/
可能你正在寻找这样的东西:在时区之间转换时间
日历类内置了用于执行转换的方法。
您可以使用设置时区设置所需的时区。
另请参阅 Date 类中的 getTimeZoneOffset。
您可以使用JodaTime及其对不同时区的支持。
也就是说,如果你知道你有字符串ISO格式或特定的已知格式(就像它看起来像这样),你可以做一些事情:
DateTimeFormatter fmt = ISODateTimeFormat.dateTime().withZone("Asia/Kolkata");
DateTime newDate = fmt.parseDateTime([your input date]);
// You can manipulate your date here...
String newString = fmt.withZone("Canada/Atlantic").print();
这在内部处理所有时区事务,包括 DST。
简单的方法是将日期时间和时区设置为日历和获取时间。下面是将设置时区和用户特定时间的示例代码。
Date date =new Date(2012,9,28,2,00,00); //Set time to Date
Calendar calendar = new GregorianCalendar(TimeZone.getTimeZone("Canada/Atlantic"));
calendar.setTime(date);
System.out.println("Timezone :: " + calendar.getTimeZone());
System.out.println("Time :: " + calendar.getTime());
输出:
Timezone :: sun.util.calendar.ZoneInfo[id="Canada/Atlantic",offset=-14400000,dstSavings=3600000,useDaylight=true,transitions=228,lastRule=java.util.SimpleTimeZone[id=Canada/Atlantic,offset=-14400000,dstSavings=3600000,useDaylight=true,startYear=0,startMode=3,startMonth=3,startDay=1,startDayOfWeek=1,startTime=7200000,startTimeMode=0,endMode=2,endMonth=9,endDay=-1,endDayOfWeek=1,endTime=7200000,endTimeMode=0]]
Time :: Mon Oct 28 02:00:00 GMT 3912
您将获得来自时区使用日光(真/假),dstSavining(加拿大1小时)的所有信息有关时区的更多功能,请参阅以下链接:http://biese.wordpress.com/2006/10/23/java-daylight-saving-time-and-time-zone/
以下是获取夏令时信息的链接:http://timeanddate.com/worldclock/clockchange.html?n=1187&year=2012