在Java中将UTC时间转换为本地时区 [英] converting a UTC time to a local time zone in Java
问题描述
我知道这个主题已被殴打死亡,但在搜索了几个小时后,我不得不问这个问题。
I know this subject has been beaten to death but after searching for a few hours to this problem I had to ask.
我的问题:基于客户端应用(iphone)的当前时区的服务器。客户端应用程序告诉服务器,以秒为单位,它的时区距离GMT有多远。我想使用这些信息对服务器中的日期进行计算。服务器上的日期都存储为UTC时间。 因此,我希望在UTC Date对象转换为此本地时区后获取HOUR。
My Problem: do calculations on dates on a server based on the current time zone of a client app (iphone). The client app tells the server, in seconds, how far away its time zone is away from GMT. I would like to then use this information to do computation on dates in the server. The dates on the server are all stored as UTC time. So I would like to get the HOUR of a UTC Date object after it has been converted to this local time zone.
我当前的尝试:
int hours = (int) Math.floor(secondsFromGMT / (60.0 * 60.0));
int mins = (int) Math.floor((secondsFromGMT - (hours * 60.0 * 60.0)) / 60.0);
String sign = hours > 0 ? "+" : "-";
Calendar now = Calendar.getInstance();
TimeZone t = TimeZone.getTimeZone("GMT" + sign + hours + ":" + mins);
now.setTimeZone(t);
now.setTime(someDateTimeObject);
int hourOfDay = now.get(Calendar.HOUR_OF_DAY);
变量小时和分钟表示当地时区远离GMT的小时和分钟。调试此代码后,变量的小时,分钟和符号是正确的。
The variables hour and mins represent the hour and mins the local time zone is away from GMT. After debugging this code - the variables hour, mins and sign are correct.
问题是hourOfDay不返回正确的小时 - 返回UTC时间的小时而不是本地时间。想法?
The problem is hourOfDay does not return the correct hour - it is returning the hour as of UTC time and not local time. Ideas?
推荐答案
您的时区字符串配方不正确。尝试此操作,
You timezone string is formulated incorrectly. Try this,
String sign = secondsFromGMT > 0 ? "+" : "-";
secondsFromGMT = Math.abs(secondsFromGMT);
int hours = secondsFromGMT/3600;
int mins = (secondsFromGMT%3600)/60;
String zone = String.format("GMT%s%02d:%02d", sign, hours, mins);
TimeZone t = TimeZone.getTimeZone(zone);
这篇关于在Java中将UTC时间转换为本地时区的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!