将带有偏移量的日期字符串转换为忽略偏移量的自定义格式

Converting Date string with offset to custom format ignoring the offset

我有一个带偏移量的输入日期字符串,我想将其转换为自定义格式。问题是,当我使用 Joda DateTimeFormatter 进行转换时,生成的字符串在我的本地时区。如何转换字符串,但保持时区不变?

这是我现在拥有的:

public String getFormattedDate(String dateTimestamp) {
        DateTimeFormatter fmt = DateTimeFormat.forPattern("MMM d, yyyy h:m a");
        return fmt.print(new DateTime(dateTimestamp));
        //return new LocalDateTime(dateTimestamp).toString();
}

这是我得到的:

input: 2017-03-20T00:00:00       | output: Mar 20, 2017 12:0 AM
input: 2017-03-23T15:12:24-04:00 | output: Mar 23, 2017 12:12 PM

午夜时分,我没有得到任何偏移量(示例 1)。所以这很好用。但是,在第二个示例中,我得到了一个偏移量(时区是 EST)。我的代码将其转换为本地时间 (PST)。我该如何避免这种情况?

谢谢。

由于您对时区不感兴趣,请使用 LocalDateTime。

您需要解析日期保留时区,如下所示:

return fmt.print(ISODateTimeFormat.dateTimeParser().withOffsetParsed().parseDateTime(dateTimestamp));

withOffsetParsed() 方法可以解决问题。使用此代码,我得到了以下内容:

input: 2017-03-20T00:00:00       | output: Mar 20, 2017 12:0 AM
input: 2017-03-23T15:12:24-04:00 | output: Mar 23, 2017 3:12 PM