【问题标题】:Change a Date Object's Timezone in Java?在 Java 中更改日期对象的时区?
【发布时间】:2012-09-05 06:42:16
【问题描述】:

土耳其有两个时区 GMT+2 和 GMT+3。 我想将 GMT+2 日期更改为 GMT+3,但我想保护 GMT+2 时区中的小时和分钟。

我想用小时和分钟,然后将这些值设置为 GMT+3 TimeZone 日期。结果,小时和分钟不得更改,但时区必须仅更改。 toconvert函数中的日期必须是GMT+2格式,但返回值必须是GMT+3格式。怎么做清楚?

public static Date convertTimezone(Date toConvert) {
    Date date = new Date();
    date.setYear(toConvert.getYear());
    date.setMonth(toConvert.getMonth());
    date.setHours(toConvert.getHours());
    date.setMinutes(toConvert.getMinutes());
    return date;
}

【问题讨论】:

  • 日期没有时区的概念??也许使用日历?
  • 一些输入和期望输出的例子会让你更容易理解你想要代码做什么。
  • 我解决了我的问题,我了解到:这是关于 DateFormat 而不是 Date。谢谢大家。

标签: java date timezone


【解决方案1】:

在 Java 中,Date 代表一个时间点,仅此而已。这意味着Date 对它的打印方式、时区等一无所知...

因此,您在打印Date 时设置时区。 DateFormat 类通常用于打印,时区是您可以在DateFormat 上设置的属性的一部分。通常,人们使用子类SimpleDateFormat

【讨论】:

    【解决方案2】:

    java.util.Date 无法跟踪您的时区详细信息。改用日历

    【讨论】:

      【解决方案3】:

      在这种情况下,您不应该使用 Date 对象。请改用日历。

      public static Calendar convertTimezone(Calendar toConvert) {
          Calendar calendar = Calendar.getInstance(TimeZone.getTimeZone("GMT+3"));
          calendar.set(Calendar.YEAR, toConvert.get(Calendar.YEAR));
          calendar.set(Calendar.MONTH, toConvert.get(Calendar.MONTH));
          calendar.set(Calendar.DATE, toConvert.get(Calendar.DATE));
          calendar.set(Calendar.HOUR_OF_DAY, toConvert.get(Calendar.HOUR_OF_DAY));
          calendar.set(Calendar.MINUTE, toConvert.get(Calendar.MINUTE));
          return calendar;
      }
      

      【讨论】:

      • 为什么不直接使用 calendar.setTime(toConvert.getTime())?
      • @Adam 他想保存源日期的小时。
      【解决方案4】:

      您可以使用Calender API 将一个时区转换为另一个时区

      public static Date convertTimezone(Date toConvert) {
          Calender calendar = Calendar.getInstance();
          calender.setTime(toConvert);
          int hour = calender.get(Calender.HOUR_OF_DAY);
          int minutes = calender.get(Calender.MINUTE);
          Calendar ret  = new GregorianCalender(timeZone); //timeZone is destination TimeZone
          ret.setTimeInMillis(calendar.getTimeInMillis() +
                  timeZone.getOffset(calendar.getTimeInMillis()) -
                  TimeZone.getDefault().getOffset(calendar.getTimeInMillis()));
          ret.set(Calender.HOUR_OD_DAY, hour);
          ret.set(Calender.MINUTE, minutes);
      
          return ret.getTime();
      }
      

      【讨论】:

        猜你喜欢
        • 2015-01-29
        • 2019-11-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-02-16
        • 2020-04-02
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多