2016-07-09 9 views
0

Какое значение для даты формулы() - день (дата()) + 1?Как выполняется расчет даты обработки foxpro? (исходя из java) результата для даты() - день (дата()) + 1 операция?

если даты (возвратов) '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

На самом деле это очевидно и 2016/5/1. Математика проста:

дата() - день (дата()) будет 2016/5/5 - 5 дней, то есть 2016/4/30 (theDate - day (theDate) дает последний день предыдущего месяца, добавляя 1 дает первый день месяца, в котором находится дата). Добавление 1 дня к нему означает 2016/5/1.

Я не знаю Java, но для меня ваш второй код Java неверен.

Во-первых, вы вычитаете день месяца, а затем добавляете 1 (то же, что и VFP).

Во втором случае вы устанавливаете today2 в «завтра», а затем вычитаете день завтрашнего дня с сегодняшней даты. Это означало бы дату() - (день (дата() + 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)); 
+0

@vimsliu, хотя Цетин предлагает большие детали/разъяснения в своем ответе, осторожно, если вы действительно имеете дело с полем даты/времени. Если это так, добавление числового значения, например 1, фактически является секундой для поля даты/времени, поэтому для добавления 1 минуты будет +60. 1 час будет 60 * 60. Но вы хотели по дате, и я просто хотел уточнить В СЛУЧАЕ, что вы имели дело с полем даты/времени. – DRapp

+0

В случае DateTime начало месяца будет таким же, вы должны были бы отнести его к дате, а математика останется тем же :) cast (theDateTime as Date) - day (theDateTime) +1. –