我有一个GregorianCalendar问题,所以如果你愿意的话可以帮我解决它。首先我给你我的代码:java 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(也是日期变化)。如果我再按+,它也会改变一天(所以到今天这个例子)。
我做了什么错误,还有什么我应该写入我的代码?
感谢您的帮助球员。
看起来好像你没有向我们展示你试图运行的真实代码(根据'day'和'date'来判断)。也许你可以在不需要任何GUI的情况下提取一个独立的示例,但只需要几行代码 - 首先创建一个Calendar实例,然后调用add()操作,然后检查预期的结果。 –
这与您的问题无关,但无需手动构建您返回的字符串。你可以像这样简单地重用你的SimpleDateFormat对象:'return df.format(g);'。 [SimpleDateFormat](http://docs.oracle.com/javase/6/docs/api/java/text/SimpleDateFormat.html)可以同时工作:解析**和**格式。 – jahroy
Grzegorz Oledzki我修复了这个日期问题。我有另一种语言,你可能不明白,所以我只是简单地换成英文。 jahroy,我知道这一点;)这只是一个例子,因为我还在做一些其他的事情,比如学习我的儿子关于编程。 – Matjaz