java - DateTimeFormatter 的 withZone(DateTimeZone.UTC) 更改日期值

标签 java datetime jodatime datetime-format java-6

我有下面的代码

    final DateTimeFormatter COMBINED_FORMAT = ISODateTimeFormat.dateTimeParser().withZone(
                DateTimeZone.UTC);
         System.out.println(COMBINED_FORMAT.parseDateTime("2012-04-01T00:00:00.000").toDate());

结果为2012 年 4 月 1 日星期日 05:30:00 IST 我希望返回Sun Apr 01 00:00:00 IST 2012

我怎样才能得到这个?

最佳答案

首先,您不应使用 java.util.Date.toString()(在示例中隐式使用)来评估结果。原因是它总是以系统时区输出而不是结果的真实状态,这令人困惑。

第二:如果将区域设置为 UTC,则指示解析器将无区域字符串“2012-04-01T00:00:00.000”解释为 UTC 而不是 IST。只需查看结果的状态即可:

DateTimeFormatter COMBINED_FORMAT =
  ISODateTimeFormat.dateTimeParser().withZone(DateTimeZone.UTC);
System.out.println(COMBINED_FORMAT.parseDateTime("2012-04-01T00:00:00.000"));
// 2012-04-01T00:00:00.000Z

但是,如果您希望结果为“Sun Apr 01 00:00:00 IST 2012”(date.toString() 的输出)或等效值:“2012-04-01T00:00:00+05:30 "那么你必须指示解析器将输入解释为 IST 而不是 UTC。

解决方案:

DateTimeFormatter COMBINED_FORMAT =
    ISODateTimeFormat.dateTimeParser().withZone(DateTimeZone.forID("Asia/Kolkata"));
System.out.println(COMBINED_FORMAT.parseDateTime("2012-04-01T00:00:00.000"));
// 2012-04-01T00:00:00.000+05:30

关于java - DateTimeFormatter 的 withZone(DateTimeZone.UTC) 更改日期值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38588770/

相关文章:

java - 杰老板 : Unable to get threaddump

java - 我从哪里开始进行文本模式识别 - 基于 Java

javascript - 输入字段中的angularjs时间戳到日期时间格式字符串

php - 时间数组找到一个比设定时间早 15 分钟的时间

java - joda 日期 DateTimeFormatterBuilder 追加不起作用

java - Android转换日期时间解析错误(甚至尝试过 Joda Time )

java - 如何处理 URL(Spring、REST、CXF)中的转义字符(管道 |)?

c# - 更新 DataTable.Rows[i].ItemArray[j] 值

java - Joda Time : How to convert String to LocalDate?

java - 在 Spring MVC 中传递日期以请求参数