Java 服务器遵循GMT时间而不是本地时间
我有一个Java应用程序,在美国的服务器上运行。我的应用程序有一个方法,可以找到本地时间和从数据库获取的另一个时间戳值之间的差异,我需要检查这个差异是否大于86400秒(1天)。我这里的问题是,服务器正在跟踪GMT,我无法找到以毫秒为单位的本地时间。我试图找到美国时间和格林尼治标准时间之间的偏移量,然后从System.currentTimeMillis()中减去,在以下代码的帮助下找到美国的本地时间Java 服务器遵循GMT时间而不是本地时间,java,date,calendar,timezone,Java,Date,Calendar,Timezone,我有一个Java应用程序,在美国的服务器上运行。我的应用程序有一个方法,可以找到本地时间和从数据库获取的另一个时间戳值之间的差异,我需要检查这个差异是否大于86400秒(1天)。我这里的问题是,服务器正在跟踪GMT,我无法找到以毫秒为单位的本地时间。我试图找到美国时间和格林尼治标准时间之间的偏移量,然后从System.currentTimeMillis()中减去,在以下代码的帮助下找到美国的本地时间 int Offset_inmillis = Calendar.getInstance().get
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和dstu inmillis值均为0)。我可以通过减去偏移量(对代码中的偏移量值进行硬编码)来提供解决方案,但我不想这样做,因为它不考虑夏令时,而且如果代码在不同时区的不同服务器上挂起,代码也不起作用
我需要一个解决方案,代码适用于所有时区。为此,我需要一个解决方案来查找服务器的本地时间(以毫秒为单位)(但在本例中,服务器遵循GMT时间)。有人能帮忙吗?您可以使用java.util.TimeZone类来实现这一点。这里有一个小例子:
http://www.roseindia.net/java/example/java/util/TimeZones.shtml
希望这对您有所帮助。查找本地时间和从数据库获取的另一个时间戳值之间的差异
// 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为单位我在代码中使用了时区。问题不在于这一点。主要问题是服务器跟随GMT,我怀疑在不遵守夏时制的情况下,是否会返回不同的值。目前,它返回正确的值。谢谢你,伙计!