夏令时

本文通过具体示例演示了如何使用Java中的Calendar类处理日期、夏令时偏移及不同时区的时间转换。展示了日期加减、时区设置及其对时间的影响。

证明 Calendar.DST_OFFSET 和时区,还有时间相关

package com.siyuan.test.jdk;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.TimeZone;

public class DSTTest {
	
	public static String format(Calendar calendar) {
		return calendar.get(Calendar.YEAR) + "-"
			+ (calendar.get(Calendar.MONTH) + 1) + "-"
			+ calendar.get(Calendar.DATE) + " "
			+ calendar.get(Calendar.HOUR_OF_DAY) + ":"
			+ calendar.get(Calendar.MINUTE) + ":"
			+ calendar.get(Calendar.SECOND);
	}
	
	public static void main(String[] args) throws ParseException {
	    
	    //证明 Calendar.DST_OFFSET 和时区,还有时间相关
	    SimpleDateFormat dateFmt = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
	    Calendar calendar = Calendar.getInstance();
	    String time = "1991-04-07 00:00:00";
	    calendar.setTime(dateFmt.parse(time));
	    System.out.println(format(calendar));
	    System.out.println(calendar.getTimeZone());
	    System.out.println(calendar.get(Calendar.DST_OFFSET));
	    System.out.println("--------------------------------------------------------");
	    
	    //1.时间
	    calendar.add(Calendar.DATE, 7);
	    System.out.println(format(calendar));
	    System.out.println(calendar.getTimeZone());
	    System.out.println(calendar.get(Calendar.DST_OFFSET));
	    System.out.println("--------------------------------------------------------");
	    
	    //2.时区
	    time = "1991-04-07 00:00:00";
	    calendar.setTime(dateFmt.parse(time));
	    calendar.setTimeZone(TimeZone.getTimeZone("Europe/London"));
	    System.out.println(format(calendar));
	    System.out.println(calendar.getTimeZone());
	    System.out.println(calendar.get(Calendar.DST_OFFSET));
	    System.out.println("--------------------------------------------------------");
	    
	}

}

结果

1991-4-7 0:0:0
sun.util.calendar.ZoneInfo[id="Asia/Shanghai",offset=28800000,dstSavings=0,useDaylight=false,transitions=19,lastRule=null]
0
--------------------------------------------------------
1991-4-14 1:0:0
sun.util.calendar.ZoneInfo[id="Asia/Shanghai",offset=28800000,dstSavings=0,useDaylight=false,transitions=19,lastRule=null]
3600000
--------------------------------------------------------
1991-4-6 17:0:0
sun.util.calendar.ZoneInfo[id="Europe/London",offset=0,dstSavings=3600000,useDaylight=true,transitions=242,lastRule=java.util.SimpleTimeZone[id=Europe/London,offset=0,dstSavings=3600000,useDaylight=true,startYear=0,startMode=2,startMonth=2,startDay=-1,startDayOfWeek=1,startTime=3600000,startTimeMode=2,endMode=2,endMonth=9,endDay=-1,endDayOfWeek=1,endTime=3600000,endTimeMode=2]]
3600000
--------------------------------------------------------

 JRE中的ZoneInfo路径

%JRE_HOME%\lib\zi

  

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值