Timestamp auf volle Einheit abrunden

Fohnbit

Top Contributor
Hallo!

Mir machen die Zeitrechnungen Probleme.
Ich möchte von einem gegeben Zeitstempel auf eine volle Einheit abrunden:
1437256799999L =2015-07-18 23:59:59

Ich möchte nun daraus die Zeit in Millisekunden von:
2015-01-01 00:00:00
2015-07-01 00:00:00
2015-07-18 00:00:00
usw

Klappt alles, bis auf:
2015-01-01 00:00:00

mit dem nachstehenden Code bekomme ich immer:
2015-01-01 01:00:00

Java:
    Calendar cl = Calendar.getInstance();
     cl.setTimeInMillis(1437256799999L);

      cl.set(Calendar.MILLISECOND, 0);
      cl.set(Calendar.SECOND, 0);
      cl.set(Calendar.MINUTE, 0);
      cl.set(Calendar.HOUR, 0);
      cl.set(Calendar.AM_PM, 0);
      cl.set(Calendar.DAY_OF_MONTH, 1);
      cl.set(Calendar.MONTH, 0);

     System.out.println(cl.getTimeInMillis()

Ziehe ich 1h einfach danach ab, paßt es ...
Lasse ich aber "cl.set(Calendar.MONTH, 0);" weg, stimmt die Uhrzeit wieder: 00:00:00

Sieht jemand das Problem?

Danke!
 

Fohnbit

Top Contributor
Hallo,

ja, aber da bin ich leider nicht weiter gekommen :-(

Ich habe es jetzt mit Joda Time besser lösen können:
Java:
long timestamp = System.currentTimeMillis();

     DateTime firstMinute = new DateTime(timestamp).minuteOfDay()
         .roundFloorCopy();
     DateTime lastMinute = new DateTime(timestamp).minuteOfDay()
         .roundCeilingCopy();

     DateTime firstHour = new DateTime(timestamp).hourOfDay()
         .roundFloorCopy();
     DateTime lastHour = new DateTime(timestamp).hourOfDay()
         .roundCeilingCopy().minusMillis(1);

     DateTime firstDay = new DateTime(timestamp).dayOfMonth()
         .roundFloorCopy();
     DateTime lastDay = new DateTime(timestamp).dayOfMonth()
         .roundCeilingCopy().minusMillis(1);

     DateTime firstMonth = new DateTime(timestamp).monthOfYear()
         .roundFloorCopy();
     DateTime lastMonth = new DateTime(timestamp).monthOfYear()
         .roundCeilingCopy().minusMillis(1);

     DateTime firstYear = new DateTime(timestamp).yearOfCentury()
         .roundFloorCopy().minusHours(1);

     DateTime lastYear = new DateTime(timestamp).yearOfCentury()
         .roundCeilingCopy().minusHours(1).minusMillis(1);

     System.out.println("Minute: " + firstMinute.getMillis() + " "
         + (lastMinute.getMillis() - 1));
     System.out.println("Minute: " + firstMinute + " " + lastMinute);

     System.out.println("Stunde: " + firstHour.getMillis() + " "
         + lastHour.getMillis());
     System.out.println("Stunde: " + firstHour + " " + lastHour);

     System.out.println("Tag: " + firstDay.getMillis() + " "
         + lastDay.getMillis());
     System.out.println("Tag: " + firstDay + " " + lastDay);

     System.out.println("Monat: " + firstMonth.getMillis() + " "
         + lastMonth.getMillis());
     System.out.println("Monat: " + firstMonth + " " + lastMonth);

     System.out.println("Jahr: " + firstYear.getMillis() + " "
         + lastYear.getMillis());
     System.out.println("Jahr: " + firstYear + " " + lastYear);

Aber warum macht er immer noch am Jahresbeginn die Stunde?
Er gibt mir im Beispiel beim Jahr gerundet die TimeZone auf +1 ... statt +2
 

Thallius

Top Contributor
Ich habe immer noch nicht verstanden was du eigentlich willst? Willst du das Datum auch verändert haben oder soll einfach nur die Uhrzeit immer auf 0Uhr des aktuellen Tages gesetzt werden oder soll vor 12Uhr mittags auf 0uhr des aktuellen und nach 12Uhr Mittags auf 0 Uhr des folgenden Tages gesetzt werden?

Gruß

Claus
 

stg

Top Contributor
Keine Ahnung, was dein Problem ist. Dein Code-Schnipsel aus dem ersten Beitrag liefert doch genau das gewünschte Ergebnis?!

Ausgabe ist 1420066800000
Was genau dem 01.01.2015 00:00:00 entspricht.
 

Fohnbit

Top Contributor
Hallo,

Ich muss Messdaten einer Zeitspanne zuteilen.
Daher benötige ich von einem Zeitstempel die Anfang und Endzeit der Zeitspanne.

Die Zeitspanne ist verschieden.
Manchmal exakt alle 15min.
Manchmal exakt 1 Tag.

Daher muss ich den Timestamp auf den gewünschten Anfang der Periode abrunden und aufrunden.

Bei mir hat das Beispiel oben 1h Verschiebung.
Jedoch denk ich das daran die Zeitzone Schuld ist?
 

stg

Top Contributor
Was ist denn die Ausgabe in dem von dir im ersten geposteten Code-Schnipsel?

Ich will jetzt nichts hören von wegen "eine Stunde zu viel/zu wenig" oder sonst was, sondern wirklich die exakte Ausgabe.
Kommt da "1420066800000" heraus oder was anderes?
 

stg

Top Contributor
Dann versteh ich dein Problem wirklich nicht. Wenn du das nun in ein Datum umrechnest, bekommst du den 01.01.2015 um 00:00:00 CET ... das ist doch genau das, was du willst?!
 

Fohnbit

Top Contributor
Hallo,

ich denk ich habe nun meinen Gedankenfehler.
Aktuell bekomme ich CEST, da Sommerzeit.
Rufe ich aber ein Datum davor auf, erhalte ich CET.

Aktuell:
2015-07-20T10:49:47.945+02:00

Aber wenn ich nun 5 Monate abziehe, erhalte ich:
2015-02-20T10:50:55.064+01:00

Mich hat eben die "+02:00" und "+01:00" Angaben hinten irritiert, da ich aktuell nur heute und den Anfang des Jahres betrachtet hatte. Dachte es seien 2 verschiedene Zeitzonen.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
W Timestamp lesen Java Basics - Anfänger-Themen 6
P "Datestamp" to Date oder Timestamp Java Basics - Anfänger-Themen 15
Errorfield Erste Schritte Timestamp DB Java Basics - Anfänger-Themen 18
M Methoden Aus Timestamp das Datum berechnen Java Basics - Anfänger-Themen 3
B Wie aus einem Datum String eine Timestamp erzeugen Java Basics - Anfänger-Themen 6
J TimeStamp Java Basics - Anfänger-Themen 5
Y Datei auf Dektop mit timestamp Speichern Java Basics - Anfänger-Themen 5
D Timestamp -> Datum Java Basics - Anfänger-Themen 6
E Timestamp umwandeln in Datumsangabe Java Basics - Anfänger-Themen 2
Assassin Timestamp erzeugen.. Java Basics - Anfänger-Themen 7
G String in Timestamp? Java Basics - Anfänger-Themen 2
J MySQL Timestamp "lesbarer" gestalten Java Basics - Anfänger-Themen 6
G Unterschied zwischen SQL Timestamp und Java Java Basics - Anfänger-Themen 2
G Timestamp in Minuten umrechnen Java Basics - Anfänger-Themen 8
M log4j Unterverzeichnis mit Datum , Timestamp in LogDateiname Java Basics - Anfänger-Themen 2
J aktuellen Timestamp ziehen Java Basics - Anfänger-Themen 3
G Timestamp - Timestamp Java Basics - Anfänger-Themen 8
G Timestamp zu Datum und umgekehrt Java Basics - Anfänger-Themen 7
G Timestamp zu Stunde:Minute Java Basics - Anfänger-Themen 2
A Timestamp nach Datum - Datum nach Timestamo Problem ! Java Basics - Anfänger-Themen 2
M Doppelte Einträge in einer datei löschen(nach timestamp)! Java Basics - Anfänger-Themen 4
P Timestamp zu Datum machen Java Basics - Anfänger-Themen 4
J gregorian calender zu java.sql.timestamp problem Java Basics - Anfänger-Themen 3
S Timestamp in Url Java Basics - Anfänger-Themen 13
M Zeitzonen unabhängigen Timestamp in DB speichern Java Basics - Anfänger-Themen 7
S String in Unix Timestamp Java Basics - Anfänger-Themen 11
G Timestamp mal wieder Java Basics - Anfänger-Themen 2
J timestamp Java Basics - Anfänger-Themen 7
W Datum to TimeStamp in Millis Java Basics - Anfänger-Themen 7
S Unix Timestamp entschlüssen Java Basics - Anfänger-Themen 6
H Text in Timestamp umwandeln Java Basics - Anfänger-Themen 3
Z TimeStamp aus MySQL DB umwandeln? Java Basics - Anfänger-Themen 2
S Datum in Unix-Timestamp umwandeln Java Basics - Anfänger-Themen 5
G Update auf Datenbankspalte vom Typ Timestamp mit aktu. Datum Java Basics - Anfänger-Themen 3
A Timestamp Java Basics - Anfänger-Themen 4
O Datentypen Volle 16 Bit eines Short für flags Abfrage nutzen Java Basics - Anfänger-Themen 11
K JComboBox hat volle Höhe uber das gesamte JPane, warum? Java Basics - Anfänger-Themen 2
S Volle zahlen anzeigen Java Basics - Anfänger-Themen 3
U JFrame auf volle Grösse des Monitors Java Basics - Anfänger-Themen 6

Ähnliche Java Themen

Neue Themen


Oben