服务器遵循GMT时间而不是本地时间

时间:2012-05-11 09:05:16

标签: java date calendar timezone

我有一个在美国现有的服务器上运行的Java应用程序。我的应用程序有一个方法,可以找出本地时间与从数据库中提取的另一个时间戳值之间的差异,我需要检查此差异是否大于86400秒(1天)。我的问题是,服务器遵循GMT 我无法找到以毫秒为单位的本地时间。我试图找到美国时间和GMT时间之间的偏差,然后从System.currentTimeMillis()中减去在美国找到当地时间,借助以下代码

int Offset_inmillis = Calendar.getInstance().getTimeZone().getRawOffset();
int DSTSavings_inmillis = Calendar.getInstance().getTimeZone().getDSTSavings();
long localtime_inmillis = System.currentTimeMillis() + DSTSavings_inmillis + Offset_inmillis;

但是由于服务器正在考虑GMT,上面的代码再次给出GMT时间值(以毫秒为单位)(上述代码中的Offset_inmillis,DSTSavings_inmillis值均为0)。我可以通过减去偏移量(在代码中硬编码偏移值)来提供解决方法,但我不想这样做,因为它没有照顾夏令时,如果它在一个不同的服务器上提升,代码也不起作用不同的时区。

我需要解决方案,其中代码适用于所有时区。为此,我需要解决方案来查找服务器的本地时间(以毫秒为单位)(但在这种情况下服务器遵循GMT时间)。有人可以帮忙吗?

2 个答案:

答案 0 :(得分:1)

查找本地时间与从数据库中提取的另一个时间戳值之间的差异

// Change 'America/New_York' depending on the local timezone of your server
TimeZone tz = TimeZone.getTimeZone("America/New_York"); 
// Gives the offset of your server timezone from the GMT
long tzoffset = tz.getOffset(Calendar.getInstance().getTimeInMillis());

btw,理想情况下数据库时间戳也应该是GMT

答案 1 :(得分:0)

您可以使用java.util.TimeZone类来实现此目的。这里有一个小例子:

http://www.roseindia.net/java/example/java/util/TimeZones.shtml

希望这会对你有所帮助。