在Java中的时区之间转换

时间:2015-05-19 15:41:06

标签: java timezone

我正在以格式MM/dd/yyyy hh:mm a z从数据库中读取时间现在我想在用户本地时区显示此时间。所以我的问题是:

  1. 客户端或服务器端应该在哪里完成?
  2. 是否为此目的构建了库?
  3. 更新 所以我决定在服务器上进行转换,因此我的方法定义如下,服务器的参数日期和客户端时间的时区偏移量。

    public String convertToLocalDateTime(Date dateFromDB, Integer offSetMins) {
      //1. dbDateInUTC = Convert dateFromDB to UTC
      //2. return offSetMins + dbDateInUTC;
    }
    

    我不知道如何做第(1)步。有什么建议吗?

2 个答案:

答案 0 :(得分:1)

为了确保用户获得它的时区,您可以在客户端进行此操作,为此您可以使用Moment.jsdate.js等库。

只需获取服务器的日期,将其转换为long:

Date d = // date from server
long milliseconds = d.getTime(); 

发送给客户并获得抵消:

  

时区偏移是UTC与本地时间之间的差异(以分钟为单位)。请注意,这意味着如果本地时区落后于UTC,则偏移量为正,如果前置,则偏移量为负。例如,如果您的时区是UTC + 10(澳大利亚东部标准时间),则将返回-600。夏令时可以防止该值即使对于给定的区域设置也是常量。

var offset = new Date().getTimezoneOffset();

然后你必须得到更正的日期 1分钟= 60.000毫秒

var dateInMilliseconds = dateFromServer - (offset * 60000);

此外,如果@jon建议你要告诉服务器客户端的时区,请获取offset并将其发送给java以转换日期:

long offsetMillis = offset * 60000;
Date d = new Date(offsetMillis);

答案 1 :(得分:1)

在我的实践中,为避免混淆和混淆,最好:

  1. 在应用程序中使用UTC时区操作和保留日期。
  2. 使用本地时区向最终用户显示日期/时间。
  3. 因此,服务器端以UTC和客户端的所有日期/时间在本地TZ中。