java时区——获得某一时区的某一时刻一天的开始结束时间

代码地址:https://code.csdn.net/luo4105/javautilclass/tree/master 下的TimeZoneTest.java文件。

需求如下:计算出某一时区和某一时刻的一天的开始时间和日结束时间,并转成本地时区的时间显示。

这里我们可以通过两种方式实现:

第一种是通过时间的时区转化得到,如GMT+2一天的开始结束时间在GMT+8显示,我们可以先得到GMT+2时间的0点,再转成GMT+8的时间,并打印显示;

第二种是通过两个时区的偏移值计算得到,还是上面GMT+2时区转到GMT+8时区的例子,我们计算GMT+8的0点时间,再计算GMT+8到GMT+2的偏移值,GMT+8偏移值- GMT+2偏移值。将GMT+8的0点时间加上偏移值就是GMT+2的0点时间,在加1天就是结束时间。

1. 通过时间的时区转化

public void getTimeZoneDayStartAndEndByZone(TimeZone timeZone, Date clientTime) {
    Calendar cal = Calendar.getInstance(timeZone);
    cal.setTime(clientTime);
    cal.set(Calendar.HOUR_OF_DAY, 0);
    cal.set(Calendar.MINUTE, 0);
    cal.set(Calendar.SECOND, 0);
    cal.set(Calendar.MILLISECOND, 0);
    Date clientDayStartTime = cal.getTime();
    cal.add(Calendar.HOUR_OF_DAY, 24);
    Date clientDayEndTime = cal.getTime();
    System.out.println(DateFormatUtils.format(clientDayStartTime,"yyyy-MM-dd HH:mm:ss") +
            " -- " + DateFormatUtils.format(clientDayEndTime,"yyyy-MM-dd HH:mm:ss"));
}


2. 通过两个时区的偏移值计算

public void getTimeZoneDayStartAndEndByOffset(TimeZone timeZone, Date clientTime) {
    Calendar cal = Calendar.getInstance();
    cal.setTime(clientTime);
    cal.set(Calendar.HOUR_OF_DAY, 0);
    cal.set(Calendar.MINUTE, 0);
    cal.set(Calendar.SECOND, 0);
    cal.set(Calendar.MILLISECOND, 0);
    long offset = TimeZone.getDefault().getOffset(Calendar.ZONE_OFFSET) - timeZone.getOffset(Calendar.ZONE_OFFSET);
    cal.add(Calendar.MILLISECOND,(int)offset);
    Date clientDayStartTime = cal.getTime();
    cal.add(Calendar.HOUR_OF_DAY, 24);
    Date clientDayEndTime = cal.getTime();
    System.out.println(DateFormatUtils.format(clientDayStartTime,"yyyy-MM-dd HH:mm:ss") +
            " -- " + DateFormatUtils.format(clientDayEndTime,"yyyy-MM-dd HH:mm:ss"));
}


测试

@Test
public void getTimeZoneDayStartAndEndTest() {
    getTimeZoneDayStartAndEndByZone(TimeZone.getTimeZone("GMT+2"), new Date());
    getTimeZoneDayStartAndEndByOffset(TimeZone.getTimeZone("GMT+2"), new Date());
}


结果

2017-08-29 06:00:00 -- 2017-08-30 06:00:00

2017-08-29 06:00:00 -- 2017-08-30 06:00:00
————————————————
版权声明:本文为CSDN博主「咸鱼老罗」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/luo4105/article/details/77678507

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值