Java UTC Time

项目需要把 long 转换成 Timestamp,而且需要是 UTC 时间。

网上 google了好久,总结了这个写法

Calendar cal = Calendar.getInstance();
long value = cal.getTimeInMillis();       //your long value.
int zoneOffset = cal.get(Calendar.ZONE_OFFSET); 
int dstOffset = cal.get(Calendar.DST_OFFSET); 
cal.setTimeInMillis(value);
cal.add(Calendar.MILLISECOND, -(zoneOffset+dstOffset)); //it only takes int int
System.out.println(new Timestamp(cal.getTimeInMillis()));

update

 public static Timestamp getUTCTimestamp(final long value){    
        long v2 = value;
        Calendar cal = Calendar.getInstance();
        TimeZone tz = cal.getTimeZone();
        long offset = tz.getOffset(value);
        v2 = value - offset;                //v2 is local time 
        return new Timestamp(v2);  
    }


Another Update: from TimeZone to TimeZone

public void getTime(long time, TimeZone toTimeZone) {

        Calendar cal = Calendar.getInstance();
        cal.setTimeInMillis(time);
        int zoneOffset = cal.get(Calendar.ZONE_OFFSET); // Get TimeZone difference
        int dstOffset = cal.get(Calendar.DST_OFFSET); // Get summer time difference
        // logger.debug("To  UTC: {} ,{} ",zoneOffset,dstOffset);
        cal.add(java.util.Calendar.MILLISECOND, -(zoneOffset + dstOffset)); // now update the time

        int zoneOffset2 = toTimeZone.getRawOffset();
        int dstOffset2 = 0;
        cal.add(Calendar.MILLISECOND, (zoneOffset2));
        if (toTimeZone.inDaylightTime(cal.getTime())) {
            dstOffset2 = toTimeZone.getDSTSavings();
            cal.add(Calendar.MILLISECOND, (dstOffset2));
        }
        //logger.debug("To  UTC: {} ,{} ", zoneOffset2, dstOffset2);
        
        Timestamp ts = new Timestamp(cal.getTimeInMillis());
        logger.debug("{} :=  {} ", toTimeZone.getDisplayName(), ts);

    }

update

 public static Timestamp getTimStampInTimeZone(final long value, TimeZone toTimeZone){
        long v2 = value;
        Calendar cal = Calendar.getInstance();
        TimeZone tz = cal.getTimeZone();
        long offset = tz.getOffset(value);
        v2 = value - offset; //v2 is local time
        
        long offset2 = toTimeZone.getOffset(v2);
        v2 += offset2;        
        return new Timestamp(v2);
    }


转载于:https://my.oschina.net/u/1767744/blog/294709

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值