12:xx在SimpleDateFormat.format(“ hh:mm:ss”)中显示为00:xx

12:xx在SimpleDateFormat.format(“ hh:mm:ss”)中显示为00:xx,第1张

12:xx在SimpleDateFormat.format(“ hh:mm:ss”)中显示为00:xx

首先是几个像您这样的格式化程序,仅使用

DateTimeFormatter
from
java.time
,现代的Java日期和时间API:

private static DateTimeFormatter dtfOld = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");private static DateTimeFormatter dtfNew = DateTimeFormatter.ofPattern("dd-MM-yyyy HH:mm:ss");

需要注意的两件事:(1)按照逻辑顺序声明格式化程序,即使用顺序。在问题中使用相反的顺序使我感到困惑,我不确定是否也使自己困惑。(2)在00到23之间的一天中的小时

dtfOld
使用大写字母
HH
,在
hh
01到12的AM或PM中使用小时的小写字母(在这种情况下,相同的格式模式字母适用于
SimpleDateFormat
DateTimeFormatter
;但有所不同)。现在,其余的工作很无聊,只比您的代码简单:

    LocalDateTime parsed = LocalDateTime.parse("2017-03-12 12:33:33", dtfOld);    System.out.println(parsed);    LocalDateTime dateTime = parsed.plusSeconds(10);    System.out.println(dateTime);    System.out.println(dateTime.format(dtfNew));

输出为:

2017-03-12T12:33:332017-03-12T12:33:4312-03-2017 12:33:43

我推荐

java.time
。旧的日期和时间类,您使用的-
SimpleDateFormat
Calendar
Date
-早已过时。不仅在这种情况下,现代类还允许使用更简单的代码,这很常见。我发现
java.time
工作起来通常好得多。

您的代码出了什么问题?

我已经给出了一个提示:小写

hh
表示从01到12的AM或PM中的小时数。当您不提供和解析AM / PM标记时,默认使用AM。而12:33:33
AM表示午夜后半小时多一点,并在24小时制上显示为00:33:33。

从13:00到23:59的时间?它们在AM中不存在。显然,

SimpleDateFormat
它不在乎,只是从01到11的时间进行推断,因此恰好为您提供了您期望的时间。有一个技巧可以告诉它不要;但我不想打扰,我宁愿完全不使用该类。

链接

Oracle教程:Date
Time解释如何使用

java.time



欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5506198.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-13
下一篇 2022-12-13

发表评论

登录后才能评论

评论列表(0条)

保存