java - 为什么 Joda DateTime 给出的结果与 Java Date 不同?

标签 java date datetime jodatime

我测试了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/

相关文章:

MySQL函数在时差计算上达到限制

java - 刷新后的Whitelabel错误页面

php - 查找存储为 varchar 的两个日期时间列之间的时间差

java - 通过 Maven 用于嵌入式 Tomcat 的库

java - 从周数查找一周的开始结束日期

php - 再次使用 PHP 中的周数

python - matplotlib 中的 Pandas 自动日期时间格式

datetime - PostgreSQL - 如何将数字字段中的秒数转换为 HH :MM:SS

java - 由 JNI_CreateJavaVM() 启动的线程数

java - 如何从 TableView javafx 中的列中获取单元格值?