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

标签 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 时间)。有人可以帮忙吗?

最佳答案

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

// 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 - 服务器遵循 GMT 时间而不是本地时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10548502/

相关文章:

java - 尝试在导入的 bmp 图像中设置透明度

java - 获取上个月的第一个和最后一个日期

java - 从日历到 Joda DateTime 的 JAXB 适配器

java - 如果在 Spring Data JPA 中为 null,则跳过 @Param 作为 @Query 中的列表 : antlr. NoViableAltException:意外的 AST 节点

java - 比较器、集合和 HashMap

java - 从 JAVA 内部 JSON 对象读取

java - 解析带有时区的时间戳

MySQL 面试 q : make a query that adds the number of worked hours in a given time period and display the name and total no. 工作时间

javascript - Codecademy 的日历 AngularJS 家庭作业不会显示事件

java - 即使我添加 + 1,带有 DatePicker 的日历也总是返回上个月