2016-07-09 1 views
0

公式の日付() - 日(日付())+ 1の正しい値は何ですか?ビジュアルfoxproは日付計算をどのように処理しますか? (javaから来て)date() - day(date())+ 1 operation?

日付()が返す '2016年5月5日'

が、2016年5月1日である場合には?または2016/4/29?

視覚的な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 - 2016/4/30で5日(theDate - 日(theDate)は前月の最終日を与えます。 1は、日付が入っている月の最初の日を示します)。 1日追加すると2016/5/1を意味します。

Javaは分かりませんが、第2のJavaコードは間違っています。

最初は、月の日数を差し引いた後、1を追加します(VFPの処理と同じです)。

第2の設定では、today2を「明日」に設定してから、今日の日付から明日の日を差し引きます。これは、date() - (day(date()+ 1))を意味し、先月の終了日の前の日を取得します。

更新:

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

:に変換する必要があり

firstDayOfMonth = theDate - day(theDate) + 1 

:月の開始を見つけるために、VFPコード

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

IOW:私はあなたのようにあなたのコードを簡素化することができると思います@vimsliu、Cetinは彼の答えで素晴らしいディテール/説明を提供していますが、実際に日付/時刻フィールドを扱っている場合は注意が必要です。そうであれば、1などの数値の加算は実際には日付/時刻フィールドの秒数なので、1分を加算すると+60になります。 1時間は60 * 60になります。しかし、日付で欲しかったのですが、あなたは日付/時刻フィールドを扱っていたというケースを明確にしたかっただけです。 – DRapp

+0

DateTimeの場合、月の開始は同じで、日付にキャストして数学は同じままです:) cast(theDateTime as Date) - day(theDateTime)+1。 –

関連する問題