我测试了Joda DateTime 与 UTC 时区相对于 java.util.Date
,我遇到了一个有趣的案例:
import org.joda.time.DateTime;
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.*;
import java.util.Date;
public class Main {
public static void main(String[] args) throws ParseException {
String dt = "2011-06-11T12:00:00Z";
String format = "yyyy-MM-dd'T'hh:mm:ss'Z'";
DateFormat df = new SimpleDateFormat(format);
df.setTimeZone(TimeZone.getTimeZone("UTC"));
Date d = df.parse(dt);
DateTime joda = new DateTime(dt);
// Output Sat Jun 11 05:00:00 PDT 2011
System.out.println(joda.toDate());
// Output Fri Jun 10 17:00:00 PDT 2011
System.out.println(d);
}
}
我想知道这是一个错误还是我错过了一些重要的东西?
最佳答案
(编辑:更清晰、更正确的答案)
我认为这是因为 JODA 和 Java 日期格式对 12 小时表示中的“12”的处理方式不同。其中一个将其视为午夜,而另一个将其视为中午。 罢工>
将您的输入更改为 2011-06-11T01:00:00Z
将证明我的假设。
罢工>
这是因为,您正在使用 DateTime 的构造函数创建 JODA 时间,后者又使用 ISO 格式解析您的字符串,为此使用 24 小时格式:Default format used by JODA ,而您用来构造 Java Date 的 DateFormat 使用的是 hh
for hour 字段,表示 12 小时格式。因此,他们对“12”的解释不同:12 小时制将其视为午夜,而 24 小时制将其视为中午。
最简单的更改是将格式更改为 yyyy-MM-dd'T'HH:mm:ss'Z'
它使用 24 小时演示,那么它们都可以正常工作。
关于java - 为什么 Joda DateTime 给出的结果与 Java Date 不同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21324468/