2016-07-09 14 views
0

Was ist der korrekte Wert für die Formel date() - day (date()) + 1?Wie verarbeitet visual foxpro die Datumsberechnung? (kommt aus Java) Ergebnis für Datum() - Tag (Datum()) + 1 Operation?

, wenn das Datum() zurückkehrt '2016.05.05'

es ist, 2016.05.01? oder 2016/4/29?

weil beim Konvertieren von Code von Visual Foxpro zu Java?

folgender Code erzeugt unterschiedliches Ergebnis.

Calendar today2 = Calendar.getInstance(); 

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

obigen Code erzeugt 2016.05.01, während:

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

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

oben Code 2016.04.29 erzeugt.

nicht sicher, welche Konvertierung korrekt ist?

Antwort

1

Eigentlich ist es offensichtlich und 2016/5/1. Mathe ist einfach:

Datum() - Tag (Datum()) wäre 2016/5/5 - 5 Tage was ist 2016/4/30 (theDate - Tag (theDate) gibt letzten Tag des vorherigen Monats, Hinzufügen 1 gibt den ersten Tag des Monats an, an dem das Datum ist). Hinzufügen von 1 Tag bedeutet 2016/5/1.

Ich kenne Java nicht, aber für mich ist Ihr 2. Java-Code falsch.

In der ersten, subtrahieren Sie den Tag des Monats und fügen dann 1 hinzu (wie VFP).

Im zweiten setzen Sie today2 auf "tomorrow" und subtrahieren den morgigen Tag des Monats vom heutigen Datum. Das würde Datum() - (Tag (Datum() + 1) bedeuten) und Sie würden den Tag vor dem Enddatum des letzten Monats erhalten.

Update: Ich denke, dass Sie Ihren Code vereinfachen kann:

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

IOW die VFP Code Beginn eines Monats zu finden:

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

:

firstDayOfMonth = theDate - day(theDate) + 1 

übersetzen soll @vimsliu, obwohl Cetin in seiner Antwort sehr ausführlich/klar ist, sei vorsichtig, wenn du dich tatsächlich mit einem Datum/Zeit-Feld beschäftigst. Wenn dies der Fall ist, ist das Hinzufügen von Zahlen wie 1 tatsächlich Sekunden zu dem Datum/Uhrzeit-Feld, so dass 1 Minute +60 wäre. 1 Stunde wäre 60 * 60. Aber du wolltest nach Datum und ich wollte nur klarstellen, IM Fall, dass du es mit einem Datum/Zeit-Feld zu tun hast. – DRapp

+0

Im Falle einer DateTime wäre der Beginn des Monats derselbe, Sie würden es auf ein Datum umwandeln und die Mathematik bleibt gleich :) cast (theDateTime as Date) - Tag (theDateTime) +1. –