java calendar时间计算_Java Calendar计算所在时区的时间偏移量

1、通过Calendar对象,根据系统时间计算时区偏移量、夏令时时间

System.out.println("当前时间:"+new Date());

// Calendar.getInstance() 获取Calendar实例,并获取系统默认的TimeZone

Calendar calendar = Calendar.getInstance();

System.out.println("Calendar的系统默认TimeZone ID:" +

calendar.getTimeZone().getID());

// 指定时区,例如意大利的罗马时区:Europe/Rome

// 罗马时区属于东1区,也就是UTC+1或GMT+1

TimeZone itTimeZone = TimeZone.getTimeZone("Europe/Rome");

// Calendar指定罗马时区

calendar.setTimeZone(itTimeZone);

System.out.println("Calendar指定TimeZone ID:" + itTimeZone.getID());

// 夏令时时间,比标准时间快1小时,即3600000毫秒,

// 根据系统时间计算,如果不在夏令时生效范围内,则为0毫秒,反之为3600000毫秒

int dstOffset = calendar.get(Calendar.DST_OFFSET);

// 取得与GMT之间的时间偏移量,例如罗马属于东1区,则时间偏移量为3600000毫秒

int zoneOffset = calendar.get(Calendar.ZONE_OFFSET);

System.out.println("夏令时时间:"+dstOffset);

System.out.println("时间偏移量:"+zoneOffset);

执行结果:

# 非夏令时

当前时间:Tue Jan 01 15:48:11 CST 2019

Calendar的系统默认TimeZone ID:Asia/Shanghai

Calendar指定TimeZone ID:Europe/Rome

夏令时时间:0

时间偏移量:3600000

# 夏令时

当前时间:Sat Jun 01 15:52:43 CST 2019

Calendar的系统默认TimeZone ID:Asia/Shanghai

Calendar指定TimeZone ID:Europe/Rome

夏令时时间:3600000

时间偏移量:3600000

2、通过Calendar对象,根据指定时间计算时区偏移量、夏令时时间。

SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

Date date = dateFormat.parse("2019-01-12 00:00:00");

System.out.println("当前时间:"+ dateFormat.format(date));

// Calendar.getInstance() 获取Calendar实例,并获取系统默认的TimeZone

Calendar calendar = Calendar.getInstance();

System.out.println("Calendar的系统默认TimeZone ID:" +

calendar.getTimeZone().getID());

System.out.println("Calendar的默认时间:" +

dateFormat.format(calendar.getTime()));

// 指定时区,例如意大利的罗马时区:Europe/Rome

// 罗马时区属于东1区,也就是UTC+1或GMT+1

TimeZone itTimeZone = TimeZone.getTimeZone("Europe/Rome");

// Calendar指定罗马时区

calendar.setTimeZone(itTimeZone);

System.out.println("Calendar指定TimeZone ID:" + itTimeZone.getID());

// 指定时间

calendar.setTime(date);

System.out.println("Calendar指定时间:" + dateFormat.format(calendar.getTime()));

// 夏令时时间,比标准时间快1小时,即3600000毫秒,

// 根据系统时间计算,如果不在夏令时生效范围内,则为0毫秒,反之为3600000毫秒

int dstOffset = calendar.get(Calendar.DST_OFFSET);

// 取得与GMT之间的时间偏移量,例如罗马属于东1区,则时间偏移量为3600000毫秒

int zoneOffset = calendar.get(Calendar.ZONE_OFFSET);

System.out.println("夏令时时间:"+dstOffset);

System.out.println("时间偏移量:"+zoneOffset);

执行结果:

# 非夏令时

当前时间:2019-01-12 00:00:00

Calendar的系统默认TimeZone ID:Asia/Shanghai

Calendar的默认时间:2019-06-01 15:58:11

Calendar指定TimeZone ID:Europe/Rome

Calendar指定时间:2019-01-12 00:00:00

夏令时时间:0

时间偏移量:3600000

# 夏令时

当前时间:2019-04-12 00:00:00

Calendar的系统默认TimeZone ID:Asia/Shanghai

Calendar的默认时间:2019-06-01 16:00:13

Calendar指定TimeZone ID:Europe/Rome

Calendar指定时间:2019-04-12 00:00:00

夏令时时间:3600000

时间偏移量:3600000


版权声明:本文为weixin_30832021原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。