Java日历设置不正确
-
15-10-2019 - |
题
我在Java的日历上遇到了一些麻烦。我正在从TXT文件中解析一些数据,并且需要创建日期。完成以下代码后:
tmpYear = Double.parseDouble(row[yearIndex]);
tmpMonth = Double.parseDouble(row[monthIndex]);
tmpDay = Double.parseDouble(row[dayIndex]);
if(timeIndex != -1)
tmpTime = Double.parseDouble(row[timeIndex]);
if(secondsIndex != -1)
tmpSeconds = Double.parseDouble(row[secondsIndex]);
我可以调试,发现变量如下:tmpyear == 2010
tmpmonth == 12
tmpday == 30
tmptime == 15(这是一天中的时间)
tmpseconds == 0
但是运行以下代码时:
cal.set((int)tmpYear,(int)tmpMonth,(int)tmpDay,(int)tmpTime,
(int)((tmpTime - (int)tmpTime)*100),(int)tmpSeconds);
System.out.println(cal.getTime().toString());
我得到了输出:
太阳1月30日15:00:00 CST 2011
有人可以解释这是什么可能的原因吗?谢谢大家的帮助!
解决方案
月数为0-11而不是1-12。
0 =一月
1 = 2月
...
11 =十二月
利用 tmpMonth = value -1
反而。
其他提示
我相信这个月的价值从0而不是1开始,因此它将0解释为1月1日,为2月...然后1月再次将其解释为12。
来自API:
一个月 - 用于设置一个月时间字段的价值。月值是基于0的。例如,一月0。
设置日历。个月字段时,它基于零。 {1月= 0 ... 12月= 11}
原因很简单:日历API中的设计故障。这就是为什么JSR 310为了改善Java对日期的支持。
从技术上讲,班级的作者认为仅使用静态字段是一件好事。因此,您需要做的是使用以下内容:
calendar = ...
calendar.setMonth(Calendar.JANUARY);
他们不认为人们可能需要动态设置来进行日历,就像您需要的那样(这是我们的大多数人)。
月值从0(1月)到11(12月)。尝试使用((int)tmpmonth)-1设置月份获得十二月。
不隶属于 StackOverflow