我有一个在美国的服务器上运行的Java应用程序。我的应用程序有一个方法可以查找本地时间和从数据库中获取的另一个时间戳值之间的差异,我需要检查此差异是否大于 86400 秒(1 天(。我的问题是,服务器遵循格林威治标准时间,我无法以毫秒为单位找到本地时间。我试图找到美国时间和格林威治标准时间之间的偏移量,然后从 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 时间(。谁能帮忙?
查找本地时间和从数据库中获取的另一个时间戳值之间的差异
// 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 中
您可以使用java.util.TimeZone类来实现此目的。这里有一个小例子:
http://www.roseindia.net/java/example/java/util/TimeZones.shtml
希望这对您有所帮助。