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

how does visual foxpro handle date calculation? (comming from java) result for date()-day(date())+1 operation?

公式 date()-day(date())+1 的正确值是多少?

if date() returns '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。

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

其实很明显,2016/5/1。数学很简单:

date() - day(date()) 将是 2016/5/5 - 5 天,即 2016/4/30(theDate - day(theDate) 给出上个月的最后一天,首先加 1 theDate 所在月份的第几天)。加上 1 天就是 2016/5/1.

我不知道 Java,但对我来说你的第二个 Java 代码是错误的。

在第一个中,您减去月份中的第几天然后加 1(与 VFP 所做的相同)。

在第二个中,您将 today2 设置为 "tomorrow",然后从今天的日期中减去明天的日期。这意味着 date() - (day(date()+1)) 你会得到上个月结束日期的前一天。

更新:我认为您可以将代码简化为:

Calendar today = Calendar.getInstance();   
today.add(Calendar.DATE, 1 - today2.get(Calendar.DATE)); 

IOW 查找月初的 VFP 代码:

firstDayOfMonth = theDate - day(theDate) + 1

应翻译为:

Calendar firstDayOfMonth = Calendar.getInstance();
firstDayOfMonth.add(Calendar.DATE, 1 - firstDayOfMonth.get(Calendar.DATE));