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

Java 将带偏移量的日期字符串转换为自定义格式时忽略偏移量,java,jodatime,Java,Jodatime,我有一个带有偏移量的输入日期字符串,我想将其转换为自定义格式。问题是,当我使用JodaDateTimeFormatter进行转换时,得到的字符串位于本地时区。如何转换字符串,但保持时区不变 这就是我现在拥有的: public String getFormattedDate(String dateTimestamp) { DateTimeFormatter fmt = DateTimeFormat.forPattern("MMM d, yyyy h:m a"); r

我有一个带有偏移量的输入日期字符串,我想将其转换为自定义格式。问题是,当我使用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。

既然您对时区不感兴趣,请使用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

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

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

谢谢,但是当我传递带有偏移量的字符串时,LocalDateTime会抛出一个
IllegalArgumentException
。我已经试过了,但是在上面的代码中注释掉了。除非我能以另一种方式使用它?如果你不关心时区,那么在将其解析为LocalDateTimeThank之前,将输入字符串子串以删除时区,但我不想拆分输入字符串,因为我必须拆分它两次;一次表示“T”;还有一个是“-”。尽管这样做可行,但我还是接受了Hugo的答案。谢谢,但是当我传递一个带有偏移量的字符串时,LocalDateTime会抛出一个
IllegalArgumentException
。我已经试过了,但是在上面的代码中注释掉了。除非我能以另一种方式使用它?如果你不关心时区,那么在将其解析为LocalDateTimeThank之前,将输入字符串子串以删除时区,但我不想拆分输入字符串,因为我必须拆分它两次;一次表示“T”;还有一个是“-”。即使这样做行得通,我还是接受雨果的答案。