【问题标题】:Why Calendar.setTimeZone() is not effecting on date which is retrieved from database为什么 Calendar.setTimeZone() 不影响从数据库中检索的日期
【发布时间】:2013-11-08 04:50:35
【问题描述】:

我通过设置 GMT+5:30 时区将日期保存到数据库。 从数据库中获取相同日期后,我正在设置 GMT+3:00 时区。

但是日期没有改变......

例如:

在插入数据库时​​:

  Calendar cal = Calendar.getInstance();
  cal.setTime(new Date());//some date 
  cal.setTimeZone(TimeZone.getTimeZone("GMT+5:30"));
  Date date = cal.getTime();

例如:现在日期是“2014 年 11 月 7 日星期五 23:00:00 GMT”

从数据库中检索后:

  Calendar cal = Calendar.getInstance();
  cal.setTime(retrievedDate);//retrievedDate is retrieved from database. here date is "Fri Nov 07 23:00:00 GMT 2014"
  cal.setTimeZone(TimeZone.getTimeZone("GMT+3:00"));
  Date date = cal.getTime();

例如:现在也给出相同的日期“Fri Nov 07 23:00:00 GMT 2014”

【问题讨论】:

    标签: java sql date


    【解决方案1】:

    在这个意义上,时间是绝对的。 It is just

    当前时间和当前时间之间的差异,以毫秒为单位 UTC 时间 1970 年 1 月 1 日午夜。

    当您使用

    设置时区时
    cal.setTimeZone(TimeZone.getTimeZone("GMT+5:30"));
    

    您只是更改了Calendar 的显示属性。在内部,它仍将使用相同的毫秒值,但会以不同的方式显示它 +/- 几小时/分钟。

    当你最终这样做时

    Date date = cal.getTime();
    

    Date 对象是根据该毫秒值创建的,不知道任何时区。如果您想在适当的时区显示它,请使用DateFormat

    【讨论】:

      【解决方案2】:

      更改时区不会更改日历日期。

      如果您尝试输出到特定时区格式,请使用 DateFormat

          Calendar cal = Calendar.getInstance();
          Date date = cal.getTime();
          System.out.println(date);
          DateFormat df = DateFormat.getDateTimeInstance(DateFormat.FULL,DateFormat.FULL);
          df.setTimeZone(TimeZone.getTimeZone("GMT+3:00"));
          System.out.println(df.format(date));
      

      【讨论】:

        【解决方案3】:

        日期以毫秒为单位,不能通过日历操作更改。日历可能只影响日期的文本表示。使用 SimpleDateFormatter 查看不同时区的日期

        【讨论】:

          猜你喜欢
          • 2020-11-06
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2023-04-02
          • 1970-01-01
          • 2015-05-27
          相关资源
          最近更新 更多