我使用UTC时区测试Joda DateTime与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);
}
}
我想知道这是一个错误,还是我错过了一些重要的事情?
答案 0 :(得分:6)
(编辑:更清晰,更正确的答案)
我认为这是因为JODA和Java Date Format在12小时的演示中以不同的方式处理“12”。其中一个人把它当作午夜,而另一个人把它视为中午。 击>
将您的输入更改为2011-06-11T01:00:00Z
将证明我的假设。
击>
这是因为,您正在使用DateTime的构造函数创建JODA时间,后者依次使用ISO格式解析您的String,使用24小时格式:Default format used by JODA,而您使用的DateFormat构建您的Java Date对小时字段使用hh
,这意味着12小时格式。因此他们对“12”的解释不同:12小时格式将其视为午夜,而24小时将其视为中午。
最简单的更改是将格式更改为使用24小时演示文稿的yyyy-MM-dd'T'HH:mm:ss'Z'
,然后这两种格式都正常。