【问题标题】:Removing time zone from Joda DateTime object从 Joda DateTime 对象中删除时区
【发布时间】:2015-02-13 02:54:38
【问题描述】:
DateTimeFormatter df = DateTimeFormat.forPattern("yyyy-MM-dd'T'HH:mm:ss");
DateTime temp = df.withOffserParsed().parseDateTime("1970-01-02T00:00:00");
Date date = temp.toDate();
DateTime dateTime = new DateTime(date);
long epoch_start_date = dateTime.getMillis();
System.out.println(dateTime);

这打印出 1970-01-02T00:00:00.000+12:00

有没有办法从 dateTime 对象中删除时区(+12:00 位)?结果是结果时间是 1970 年 1 月 2 日下午 12:00,而不是所需的 1970 年 1 月 2 日上午 12:00。

【问题讨论】:

  • 作为一种解决方法,我尝试使用 LocalDateTime 而不是 DateTime。但是,问题在于我无法在对象上调用 getLocalMillis() 来获取纪元时间。 “LocalDateTime 类型的方法 getLocalMillis() 不可见”。

标签: java datetime timezone jodatime


【解决方案1】:

这是与 UTC/GMT 的本地时间偏移。

有没有办法从 dateTime 对象中删除时区(+12:00 位)?

是的,有一种方法,但它会导致错误的时间。假设您住在斐济或基里巴斯,给出的时间是正确的时间。它用 (+12:00) 表示,表示您所在的时区。

结果是 1970 年 1 月 1 日下午 12:00,而不是所需的 1970 年 1 月 1 日上午 12:00

由于我给出的原因,实际上并非如此。所需时间是 1970 年 1 月 2 日,而不是 1 月 1 日。当时 GMT 时间是 1 月 1 日下午 12:00,而您的当地时间是 1 月 2 日上午 12:00。

在给您适当的警告后,以下是您可以在时区周围工作的方法:

DateTimeFormatter df = DateTimeFormat.forPattern("yyyy-MM-dd'T'HH:mm:ss");
DateTime temp = df.parseDateTime("1970-01-02T00:00:00");
Date date = temp.toDate();
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
int offset = calendar.getTimeZone().getOffset(calendar.getTimeInMillis());
calendar.add(Calendar.MILLISECOND, offset);
calendar.setTimeZone(TimeZone.getTimeZone("UTC"));
DateTime dateTime = new DateTime(calendar);
System.out.println(dateTime);

请记住,这样做可能会浪费您从 Joda 以 UTC 表示时间获得的任何好处。

【讨论】:

  • 那是太平洋/奥克兰时间。我确实意识到这会导致“错误”时间,但我需要它是 1970 年 1 月 1 日上午 12:00 而不是下午 12 点。您能否详细说明解决方法(如果有)?谢谢。
猜你喜欢
  • 2017-08-21
  • 2021-09-06
  • 1970-01-01
  • 2017-12-11
  • 1970-01-01
  • 2020-02-24
  • 2016-03-07
  • 1970-01-01
  • 2013-10-20
相关资源
最近更新 更多