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;
    }

你可能感兴趣的:(Java实现UTC时区转换)