java - JodaTime解析日期+时间+半天忽略半天字段

标签 java jodatime

我不明白为什么 JodaTime 忽略日期之后的 AM/PM,例如

public static void main(String[] args) {
    DateTimeFormatter fmt = DateTimeFormat.forPattern("dd/MM/yy HH:mm:ss a");
    System.out.println(fmt.parseDateTime("23/06/2016 1:00:00 PM").toString("dd/MM/yy HH:mm:ss a"));
    System.out.println(fmt.parseDateTime("23/06/2016 1:00:00 AM").toString("dd/MM/yy HH:mm:ss a"));
}

输出为

23/06/16 01:00:00 AM
23/06/16 01:00:00 AM

正如您所看到的,输入日期时间相隔 12 小时,但在解析并转换回字符串后,它们都是相同的时间。

编辑: 感谢 Sotirios Delimanolis,正确的方法是使用“hh”而不是“HH”:

public static void main(String[] args) {
    DateTimeFormatter fmt = DateTimeFormat.forPattern("dd/MM/yy hh:mm:ss a");
    System.out.println(fmt.parseDateTime("23/06/2016 1:00:00 PM").toString("dd/MM/yy hh:mm:ss a"));
    System.out.println(fmt.parseDateTime("23/06/2016 1:00:00 AM").toString("dd/MM/yy hh:mm:ss a"));
}

输出为

23/06/16 01:00:00 PM
23/06/16 01:00:00 AM

最佳答案

我找不到任何documentation为此,但当使用表示

H 时,匹配 a (一天中的半天)的值似乎被忽略(或覆盖)

hour of day (0~23)

使用h表示

clockhour of halfday (1~12)

关于java - JodaTime解析日期+时间+半天忽略半天字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33293316/

相关文章:

java - 检查 Joda-Time DateTime 对象是否不代表一年中的最后一天的更聪明的方法是什么?

java - 使用 Joda 时间求和持续时间

Android - Proguard 未使用 Joda Time jar 文件编译

java - 在 Android 上使用 Camera API2 进行基于触摸的对焦

java - 选择 JComboBox 选项不强行更改

java - 如何在tomcat中获取webapp的工作目录?

java - Joda Time - Hibernate 将昨天的日期插入数据库

java - 在 Java 中验证时区并抛出异常

java - 如何以编程方式禁用 S3 公共(public)访问

java - 如何在使用 openCSV 编写 .csv 文件时添加分隔符