我正在尝试使用
获取其他GMT值的时间Calendar c1 = Calendar.getInstance(TimeZone.getTimeZone(gmt));
但是如何在该时区获得DST时间。
答案 0 :(得分:0)
java.util.TimeZone中有几种方法可以获得夏令时。请查看BlackBerry Java Docs页面。
答案 1 :(得分:0)
TimeZone类为特定的TimeZone对象提供getDSTSavings()方法。 (JavaDoc:“返回添加到本地标准时间以获取本地挂钟时间的时间量。”)
Calendar接口提供了两个getOffset()方法,可以让您找出UTC的偏移量。 (JavaDoc:“在指定日期返回此时区与UTC的偏移量。如果夏令时在指定日期生效,则使用夏令时量调整偏移值。”)
请查看这段代码以了解java时间的复杂方法:
@Test
public void testDST() {
final TimeZone met = TimeZone.getTimeZone("MET");
Calendar gc = new GregorianCalendar(met);
final long timeInMillis = gc.getTimeInMillis();
final long gmtTime= timeInMillis-(gc.getTimeZone().getOffset(timeInMillis));
final Date gmtDate = new Date(gmtTime);
System.out.printf("%-40s: %tc\n%-40s: %tc\n%-40s: %tc\n%-40s: %d\n%-40s: %d",
"new Date() (local timezone)",new Date(),
"UTC", gmtDate ,
"now from Calendar with TC GMT+02:00",gc,
"zoneoffset",gc.get(Calendar.ZONE_OFFSET),
"dst savings",met.getDSTSavings());
}
您也可以定义自己的SimpleTimeZone并提供自定义DST规则,但是,我还没有找到如何从预定义的TimeZones获取此信息。
你还应该知道,如果TimeZone.getTimeZone(TZName)没有找到指定的时区,它不会抛出异常,但它只使用GMT,这可能会引起重大误解。
您可以在日历,时区,日期等的javadoc中找到所有这些信息(以及更多信息)。