公式date() - day(date())+ 1的正确值是什么?
如果date()返回' 2016/5/5'
是2016/5/1吗?还是2016/4/29?
因为将代码从visual foxpro转换为java?
以下代码会产生不同的结果。
Calendar today2 = Calendar.getInstance();
Calendar endDate = Calendar.getInstance();
endDate.add(Calendar.DATE, -1 * today2.get(Calendar.DATE));
endDate.add(Calendar.DATE, 1);
上面的代码生成2016/5/1,而:
Calendar today2 = Calendar.getInstance();
today2.add(Calendar.DATE, 1);
Calendar endDate = Calendar.getInstance();
endDate.add(Calendar.DATE, -1 * today2.get(Calendar.DATE));
以上代码生成2016/4/29。
不确定哪种转换是正确的?
答案 0 :(得分:1)
实际上很明显,2016/5/1。数学很简单:
日期() - 日(日期())将是2016/5/5 - 5天,即2016/4/30(日期 - 日期(日期)给出上个月的最后一天,加1表示第一天月的日期。添加1天意味着2016/5/1。
我不懂Java,但对我来说你的第二个Java代码是错误的。
在第一个中,你减去一个月的日期,然后加1(与VFP正在做的相同)。
在第二个中,您将today2设置为“明天”,然后从今天的日期减去明天的月份。这意味着date() - (day(date()+ 1)),你会得到上个月结束日的前一天。
更新:我认为您可以将代码简化为:
Calendar today = Calendar.getInstance();
today.add(Calendar.DATE, 1 - today2.get(Calendar.DATE));
让VFP代码找到一个月的开头:
firstDayOfMonth = theDate - day(theDate) + 1
应转换为:
Calendar firstDayOfMonth = Calendar.getInstance();
firstDayOfMonth.add(Calendar.DATE, 1 - firstDayOfMonth.get(Calendar.DATE));