項目須要把 long 轉換成 Timestamp,並且須要是 UTC 時間。java
網上 google了很久,總結了這個寫法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()));
updatedebug
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 TimeZonecode
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); }
updateget
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); }