视觉foxpro如何处理日期计算? (来自java)结果为date() - day(date())+ 1次操作?

时间:2016-07-09 04:34:19

标签: java datetime visual-foxpro code-conversion

公式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。

不确定哪种转换是正确的?

1 个答案:

答案 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));