0

我通过设置 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();

例如:现在日期是“Fri Nov 07 23:00:00 GMT 2014”

从数据库中检索后:

  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”

4

3 回答 3

5

从这个意义上说,时间是绝对的。这只是

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

当您设置时区时

cal.setTimeZone(TimeZone.getTimeZone("GMT+5:30"));

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

当你最终做

Date date = cal.getTime();

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

于 2013-11-08T04:56:45.340 回答
1

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

如果您尝试输出到特定时区格式,请使用 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));
于 2013-11-08T05:15:57.473 回答
0

日期是毫秒持有者,它不能用日历操作来改变。日历可能只影响日期的文本表示。使用 SimpleDateFormatter 查看不同时区的日期

于 2013-11-08T04:59:46.833 回答