格林尼治时间与本地时间转换

在工作中遇到一个问题

某一类数据在数据库中保存时,是根据伦敦时间保存的,也就是GMT+0

其他业务在使用时,需要根据用户的输入时间去查询,用户的时间参数中带有时区

例如:

time:17:30

timeZone:GMT+8

因此需要根据时区将用户带入的参数转化为GMT+0的时间,然后去查询,在来回折腾后使用如下代码可以实现

public class TimeZoneLearn
{
    private static final String TIME_FORAMT = "yyyyMMdd'T'HHmmss'Z'";

    private static final String TIME_ZONE = "GMT+8";

    private static final String TIME_ZONE_ZERO = "GMT+0";

    @Test
    public void test() throws ParseException
    {
        Long time = getTime(new Date());
        SimpleDateFormat foraDateFormat = new SimpleDateFormat(TIME_FORAMT);
        String result = foraDateFormat.format(new Date(time));
        System.out.println(result);
    }

    public Long getTime(Date date) throws ParseException
    {
        SimpleDateFormat formater = new SimpleDateFormat(TIME_FORAMT);
        formater.setTimeZone(TimeZone.getTimeZone(TIME_ZONE_ZERO));
        String time = formater.format(date);

        formater.setTimeZone(TimeZone.getTimeZone(TIME_ZONE));
        Date parse = formater.parse(time);
        return parse.getTime();
    }
}
只需将用户的时间转换为Date对象,传入getTime方法中,TIME_ZONE常量使用用户给定的时区即可

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值