我在使用 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/