So entfernen Sie Stunde, Minute und Sekunde aus der Epoche timestamp
Muss ich eine Funktion schreiben, die akzeptiert eine java.util.Date
und entfernt Stunden, Minuten oder Millisekunden aus es MIT EINFACH MATHE (kein Datum Formatierer, kein Kalender, Objekte, etc.):
private Date getJustDateFrom(Date d) {
//remove hours, minutes, and seconds, then return the date
}
Der Zweck dieser Methode ist, um das Datum aus einem Millisekunden Wert, ohne die Zeit.
Hier ist, was ich habe, so weit:
private Date getJustDateFrom(Date d) {
long milliseconds = d.getTime();
return new Date(milliseconds - (milliseconds%(1000*60*60)));
}
Das problem ist, das entfernt nur Minuten und Sekunden. Ich weiß nicht, wie zu entfernen Stunden.
Wenn ich milliseconds - (milliseconds%(1000*60*60*23))
, dann geht es wieder bis 23:00 Uhr am Vortag.
EDIT:
Hier eine alternative Lösung:
public static Date getJustDateFrom(Date d) {
Calendar c = Calendar.getInstance();
c.setTime(d);
c.set(Calendar.HOUR_OF_DAY, 0);
c.set(Calendar.MINUTE, 0);
return c.getTime();
}
Wird diese Lösung beeinflusst werden durch die unterschiedlichen Zeitzonen zwischen client/server Seiten meiner app?
Calendar
's bekommen.tut es gehe immer um 23:00 Uhr am vorherigen Tag? Wenn das der Fall ist, können Sie nicht fügen Sie einfach 1 Stunde?
Ich habe gelesen, dass
Calendar
Objekt übernimmt die Zeitzone berücksichtigt. Ich habe eine web-app, der bekommt das Date-Objekt von einem client, und ich will nicht, dass Sie beeinflusst werden durch die Zeitzonen.das scheint mir ein bisschen hacky. Das will ich nicht betroffen sein, von Schaltjahren oder DST.
Sie versuchen zu ermitteln Datum von Millisekunden. Schaltjahre müssen berücksichtigt werden
InformationsquelleAutor Churro | 2013-10-01
Du musst angemeldet sein, um einen Kommentar abzugeben.
Gibt es 24 Stunden an einem Tag. Verwenden Millisekunden%(1000*60*60*24).
Tue Oct 01 11:15:08 PDT 2013
aus:Mon Sep 30 17:00:00 PDT 2013
Nun, wie Sie gesagt haben, Sie versuchen zu vermeiden Sommerzeit Anpassungen. Ich glaube, Sie werden feststellen, dass 17:00:00 PDT ist Mitternacht GMT. Dies IST die Antwort auf die Frage, die Sie gefragt... Vielleicht sind Sie die falsche Frage gestellt.
Du hast Recht, vielleicht bin ich die falsche Frage gestellt. Die base-Problem ist, dass ich das Datum Millisekunden ohne die Zeit. Vielleicht sollte ich einen anderen Ansatz?
Ja. Mit Dem Kalender. Insbesondere GregorianCalendar wird eine Menge der Funktionen, die Sie wollen für den Umgang mit Zeitzonen, Schaltjahre, usw.
Danke für Eure Hilfe. Ich bin mit
Calendar
jetzt.InformationsquelleAutor Mark Bailey
Einfach nicht möglich, durch Ihre definition.
Einem Millisekunden-Zeitstempel repräsentiert vergangenen Millisekunden, die von einem festen Punkt in der Zeit (1970-01-01 00:00:00.000 UTC, wenn ich mich richtig erinnere). Diese Zeitmarke kann nicht umgewandelt werden in ein Datum + Zeit ohne die Angabe der Zeitzone zu konvertieren.
So können Sie nur Runde den Zeitstempel für volle Tage in Bezug auf eine bestimmte Zeitzone, nicht im Allgemeinen. Also jedem das hantieren mit Datum.getTime() und nicht unter Berücksichtigung einer Zeitzone ist garantiert arbeiten in nur einer Zeitzone - die, die Sie hartcodiert.
Tun Sie sich einen gefallen und verwenden Sie einen Kalender.
Date
s zu gut, und der Einsatz einesCalendar
.InformationsquelleAutor Durandal
Nutzen Sie auch die apache-commons-lang DateUtils helper utility-Klasse.
Zum Beispiel, wenn Sie hatte die datetime-28 Mar 2002
13:45:01.231, wenn Sie übergeben, mit Kalender.STUNDE, würde es wieder 28 Mar
2002 13:00:00.000. Wenn diese bestanden wurde, mit Kalender.MONAT, es würde
Rückkehr am 1. März 2002 0:00:00.000.
Können Sie herunterladen commons-lang jar an http://commons.apache.org/proper/commons-lang/
InformationsquelleAutor mnm