0

我对 GregorianCalendar 有疑问,所以请您帮我解决。首先,我会给你我的代码:

private String changeClock(String day, String clock, int change) {
    String time="";
    DateFormat df=new SimpleDateFormat("yyyy-MM-dd hh:mm");
    try {
        Date d=df.parse(day+" "+clock);
        GregorianCalendar g=new GregorianCalendar();
        g.setTime(d);
        g.add(GregorianCalendar.HOUR_OF_DAY, change);
        time=g.get(GregorianCalendar.YEAR)+"-"
                +(g.get(GregorianCalendar.MONTH)+1)+"-"
                +g.get(GregorianCalendar.DAY_OF_MONTH)+" "
                +g.get(GregorianCalendar.HOUR_OF_DAY)+":"
                +g.get(GregorianCalendar.MINUTE);
    } catch (Exception e) {
        e.printStackTrace();
    }
    return time;
}

让我解释一下发生了什么。我有一个带有 + 和 - 按钮的 GUI。当有人按下 + 时,它会增加一小时,或者如果按下 - 则需要一小时。

现在例如,时间是 23:00,我按 +,一切正常,它跳到第二天的 00:00。问题出现在 12:00。如果是 12:00 并且我按 + 它会转到 1:00,然后继续。即使在 2x12 小时或 21465x12 小时之后,它也不会移动到第二天。如果我可以这么说,倒退会好一点。当它是 00:00 并且我按下 - 它会更改为昨天 23:00(日期也会更改)。如果我然后按 + 它也会改变一天(在这种情况下到今天)。

我做错了什么或者我应该在我的代码中写什么?

谢谢你们的帮助。

4

2 回答 2

3

您的日期格式错误...

您正在使用hh,这是“上午/下午 (1-12) 小时”的表示,因此下午 1 点的时间被转换为上午 1 点。

您应该使用HHwhich 是"Hour in day (0-23)"的表示形式。

要么,或者您需要提供带有 am/pm 标记的日期/时间格式...

使用DateFormat df=new SimpleDateFormat("yyyy-MM-dd HH:mm");DateFormat df=new SimpleDateFormat("yyyy-MM-dd hh:mm a");

而不是依赖String日期/时间值,您应该传入和返回一个Date对象,保留显示的格式。

于 2013-01-10T23:24:09.047 回答
0
于 2016-09-17T21:44:01.253 回答