从Joda DateTime对象中移除时区

4
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() 不可见"。 - ARampal
1个回答

6

这是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:00。你能详细说明一下解决方法吗?谢谢。 - ARampal

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接