Java 12:xx以SimpleDataFormat.格式(“hh:mm:ss”)显示为00:xx

Java 12:xx以SimpleDataFormat.格式(“hh:mm:ss”)显示为00:xx,java,simpledateformat,Java,Simpledateformat,在以下代码中使用SimpleDataFormatter.format时,startDateText文本视图中12:00到12:59之间的小时数显示为00:00到00:59,而从13:00开始,它们正确显示为13:xx,14:xx到23:59 ----按要求重构代码 当dtold.parse(…)中的字符串是示例中的字符串时,输出小时为00:00,当它为“13:00”时,正确地说是“13:00” 首先是两个类似您的格式化程序,只使用java.time中的DateTimeFormatter,现代ja

在以下代码中使用SimpleDataFormatter.format时,startDateText文本视图中12:00到12:59之间的小时数显示为00:00到00:59,而从13:00开始,它们正确显示为13:xx,14:xx到23:59

----按要求重构代码 当dtold.parse(…)中的字符串是示例中的字符串时,输出小时为00:00,当它为“13:00”时,正确地说是“13:00”


首先是两个类似您的格式化程序,只使用
java.time
中的
DateTimeFormatter
,现代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) 在
dtfOld
中,在00到23之间的时间间隔内使用大写字母
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:33
2017-03-12T12:33:43
12-03-2017 12:33:43
我推荐
java.time
。您使用的旧日期和时间类——
SimpleDateFormat
Calendar
date
——早已过时。在这种情况下,现代类不仅允许编写更简单的代码,而且非常常见。我发现与
java.time
一起工作通常会更好

你的代码出了什么问题? 我已经给出了一个提示:小写的
hh
表示从01到12的上午或下午的小时。如果不提供和分析AM/PM标记,则使用AM作为默认值。上午12:33:33表示午夜过后半小时多一点,在24小时的时钟上被渲染为00:33:33

从13:00到23:59的时间?它们在AM中不存在。显然,
SimpleDateFormat
并不在意,只是从01到11的小时数中推断出来,因此正好给了您预期的时间。有一个诀窍告诉它不要;但是我不想麻烦,我宁愿不使用这个类

链接
解释如何使用
java.time

你能把你的代码简化成一个简单的代码吗?例如,不要使用just use
ZonedDateTime.now()
(可以是AM或PM),而是构建一个特定的时间,生成特定的(可能不正确的)输出,并显示您期望的输出。另外,请改用
System.out.println()
,这样人们就可以在不使用
TextView
@sthor69的情况下重现您的问题。我认为在执行dtold.parse(date)时,信息会丢失。事实上,你的代码在13:00-23:59时运行,只是未记录的特性(或bug)@olev.V.不,我没有使用安卓。这是一个纯javaapplication@Bohemian按要求重构代码@Ole V.V。非常感谢。我不记得为什么我使用了不同的格式(HH和HH),但这就是问题所在@Bohemian you's right。我使用StackOverflow作为调试器系统,因为我急于解决这个问题。今后我会更加注意不要那样做
2017-03-12T12:33:33
2017-03-12T12:33:43
12-03-2017 12:33:43