,以显示可再现的情况下不工作,我做了以下的Java转换GMT/UTC到当地时间预期
获取当前系统时间(本地时间)
将当地时间转换为UTC //工作成功直到此处
将UTC时间反转回当地时间。遵循3种不同的方法(下面列出),但所有3种方法仅保留UTC时间。
{
long ts = System.currentTimeMillis(); Date localTime = new Date(ts); String format = "yyyy/MM/dd HH:mm:ss"; SimpleDateFormat sdf = new SimpleDateFormat (format); // Convert Local Time to UTC (Works Fine) sdf.setTimeZone(TimeZone.getTimeZone("UTC")); Date gmtTime = new Date(sdf.format(localTime)); System.out.println("Local:" + localTime.toString() + "," + localTime.getTime() + " --> UTC time:" + gmtTime.toString() + "-" + gmtTime.getTime()); // Reverse Convert UTC Time to Locale time (Doesn't work) Approach 1 sdf.setTimeZone(TimeZone.getDefault()); localTime = new Date(sdf.format(gmtTime)); System.out.println("Local:" + localTime.toString() + "," + localTime.getTime() + " --> UTC time:" + gmtTime.toString() + "-" + gmtTime.getTime()); // Reverse Convert UTC Time to Locale time (Doesn't work) Approach 2 using DateFormat DateFormat df = new SimpleDateFormat (format); df.setTimeZone(TimeZone.getDefault()); localTime = df.parse((df.format(gmtTime))); System.out.println("Local:" + localTime.toString() + "," + localTime.getTime() + " --> UTC time:" + gmtTime.toString() + "-" + gmtTime.getTime()); // Approach 3 Calendar c = new GregorianCalendar(TimeZone.getDefault()); c.setTimeInMillis(gmtTime.getTime()); System.out.println("Local Time " + c.toString());
}
一个很好的答案!但是,应该有TimeZone.getDefault()。getOffset(gmtTime.getTimeInMillis()))而不是TimeZone.getDefault()。getOffset(localTime.getTime())。否则,如果您的UTC时间为冬季,但夏令时为夏令时,则可能会遇到DaylightSaving的问题。 – Dime
'新的日期(字符串字符串)'已弃用:( –
你是一个救生员T_T这是唯一的方法来解决冲突java.util.date(@temporal)和timestamp(postgresql)的GMT与UTC – Sarief