我正在尝试用java.util.calendar构建一个简单的程序。当尝试获取之前的工作日时,我的输出总是保持不变。代码和我在下面尝试的内容:
Calendar c = Calendar.getInstance();
c.set(Calendar.MONTH, month);
c.set(Calendar.DAY_OF_MONTH, day);
c.set(Calendar.YEAR, year);
int date = c.get(Calendar.DAY_OF_WEEK);
return new SimpleDateFormat("EEEE").format(date).toUpperCase();
这是我一开始的密码。我试过一天减去一:
day = day-1;
我尝试过在“月日”和“周日”字段中都加上-1:
c.add(Calendar.DAY_OF_WEEK, -1);
c.add(Calendar.DAY_OF_MONTH, -1);
我想这和我的简单格式有关,但我不确定。
3条答案
按热度按时间btxsgosb1#
失败的原因是您没有调用您认为是的方法。根本没有
SimpleDateFormat#format(int)
. 但是SimpleDateFormat
延伸Format
,声明Format#format(Object)
. 你的int
被装在盒子里Integer
然后输入相关代码Format#format(Object)
是此时,由于您传递的值被装箱到
Integer
延伸到Number
,第二个分支if-else
并通过构造函数将星期几值转换为日期。数字被解释为毫秒值,当你减去1,你改变了1毫秒,而不是1天的时间。总之,你不应该使用
Calendar
,在中使用新的日期/时间apijava.time
包裹。ie3xauqp2#
从日历中获取星期几。
从中减去一天
Calendar
,完整演示
drkbr07n3#
我正在尝试用java.util.calendar构建一个简单的程序。
那是不可能的。特别是“简单程序”部分。使用日历的事情并不简单。
日历api很糟糕;没道理(一年的第一个月是。。。0,要更改值,必须使用int常量,这不是惯用的java),并且对它试图表示的内容感到困惑(它不是日历,而是日期/时间值,或者,是吗?是日光浴时间、预约时间还是闹钟时间?它很困惑,不知道)。这就是为什么会有一个新的api:
java.time
. java不会删除过时的东西,因为这会破坏旧代码。所以,日历仍然存在并不意味着什么。使用
java.time
.我想这和我的简单格式有关,但我不确定。
没有。但是让我们忘掉这个愚蠢的api,改用java时间吧!
想回去一天吗?可以。