从 Joda 日期时间对象中删除时区


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

有没有办法从日期时间对象中删除时区(+12:00位)?它导致的结果时间为 1970 年 1 月 2 日中午 12:00,而不是所需的 1970 年 1 月 2 日凌晨 12:00。

这是

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

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

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

它导致的结果时间为 1970 年 1 月 1 日中午 12:00,而不是所需的 1970 年 1 月 1 日凌晨 12:00

实际上不是,由于我给出的原因。所需时间是 1970 年 1 月 2 日,而不是 1 月 1 日。格林威治标准时间是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 表示时间中获得的任何好处。

最新更新