java GregorianCalendar 添加小时奇怪的行为

标签 java calendar gregorian-calendar

我在使用 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(日期也会更改)。如果我然后按 +,它也会向前一天更改(在本例中为今天)。

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

感谢大家的帮助。

最佳答案

您的日期格式错误...

您使用的是 hh,它表示“上午/下午的时间 (1-12)”,因此转换为下午 1 点的时间改为凌晨 1 点。

您应该使用 HH,它表示“一天中的小时 (0-23)”。

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

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

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

关于java GregorianCalendar 添加小时奇怪的行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14268899/

相关文章:

java比较前2个字符

java - 最低效的排序程序是什么?

java - 如何修复 GregorianCalendar 中的 gc.setTime()

c++ - 没有外部库的C++ Int到任何日期

java - Concurrency runInBackground方法逻辑实战[9.3.2]

Java:线程等待对象时是否释放所有监视器?

ios - 如何在 iOS 中以编程方式添加默认日历

primefaces - primefaces 5.0日历的一个bug

api - Office 365 日历休息 API : Meeting Vs. 预约

java - 禁用日期的不同颜色 CalendarView