0

我有一个在美国的服务器上运行的 Java 应用程序。我的应用程序有一个方法可以找到本地时间和从数据库中获取的另一个时间戳值之间的差异,我需要检查这个差异是否大于 86400 秒(1 天)。我的问题是,服务器遵循 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 时间)。任何人都可以帮忙吗?

4

2 回答 2

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

顺便说一句,理想情况下,数据库时间戳也应该是 GMT

于 2012-05-11T09:55:37.003 回答
0

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

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

希望这会帮助你。

于 2012-05-11T09:15:47.693 回答