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


你可能感兴趣的:(Java UTC Time)