Java实现UTC时区转换

因为最近拿到一个需求就是将数据库存放的时间进行转换成所对应的时区时间,所以这里就分享下如何用Java程序是实现这个功能。

数据库层面

如果数据库存放的是整型的时间戳,则可以使用FROM_UNIXTIME(数值)转换为对应的日期时间格式,然后再使用CONVERT_TZ(dt,from_tz,to_tz)函数将对应的日期时间转换为对应的时区时间。如果存放的是系统毫秒值,则先要将毫秒值将其变成秒,然后再转换成对应的时间日期格式。

示例:

获取当前时间戳

SELECT UNIX_TIMESMTAMP() as ‘当前时间戳’;
在这里插入图片描述
将时间戳转换对应的日期格式

SELECT FROM_UNIXTIME(1594952707) as ‘北京时间’;
在这里插入图片描述
时区转换
SELECT FROM_UNIXTIME(1594952707) as ‘北京时间’,CONVERT_TZ(FROM_UNIXTIME(1594952707),‘+08:00’,‘+09:00’) as ‘东京时间’;
在这里插入图片描述

了解基本用法之后,看看具体是如何在数据库层面实现动态变换时区:
在mysql中给我们提供了一个time_zone变量用来获取系统的时区,所以我们可以根据通过获取当前会话中的time_zone,然后使用convert_tz函数将会话的timezone转换我们需要的。SQL语句如下:

SELECT CONVERT_TZ(FROM_UNIXTIME(1594952707),@@session.time_zone,'+09:00') as 'UTC+09:00';
SELECT CONVERT_TZ(FROM_UNIXTIME(1594952707),@@session.time_zone,'+10:00') as 'UTC+10:00';

在这里插入图片描述
在这里插入图片描述
这里我们只要动态的传入对于应的偏移量即可~

Java业务逻辑层面

获取数据库的int类型的时间,然后转换成Date类型,Java 1.8提供了TimeZone对象,通过TimeZone的getTimeZone(zoneId)方法,传递一个偏移量,就可以得到带时区的日期。在利用DateFormate对象提供的setTimeZone(TimeZone zone) 方法设置此 DateFormat对象的日历的时区。 最后通过format方法将date格式化成对应的时区日期时间。

 public static String formatTimezone(DateFormat dateFormat, Date date, String timezone) {
        try {
            dateFormat.setTimeZone(TimeZone.getTimeZone(timezone));
            return dateFormat.format(date);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值