2017-06-26 4 views
2

Gibt es eine Möglichkeit, die aktuelle Uhrzeit in Sekunden zu erhalten? Hinweis Ich frage nach der Uhrzeit, nicht nach UTC-Zeit.Aktuelle Uhrzeit in Sekunden erhalten

Was ich will ist ein Wert (in Sekunden) zwischen dem Bereich 0 - 86.400 (12:00 AM - 23:59 Uhr). Ich arbeite an einer App, die täglich funktioniert, und wenn der Tag zu Ende ist, sollte die Zeit (in Sekunden) wieder bei 0 neu gestartet werden.

Also sagen wir mal 10:00AM. Ich sollte 36.000 Sekunden bekommen, und wenn meine Zeit ist, sollte ich 61,200 Sekunden bekommen.

PS: Ich weiß nicht die Zeit vor der Hand. Das Programm wird es selbst herausfinden mit einer currentTime() Funktion.

+1

Was haben Sie versucht/erforscht? –

+1

Erhalten Sie Ihre Zeit von der Systemuhr oder von einer anderen Quelle wie einer Datenbank? – ControlAltDel

+2

Sobald Sie die richtige 'LocalTime' haben, müssen Sie nur' toSecondOfDay' aufrufen ... Was haben Sie also versucht, die richtige 'LocalTime' zu ​​bekommen? –

Antwort

4

Mit Java 8, könnten Sie eine Duration Instanz erstellen.
Zum Beispiel:

LocalDateTime date = LocalDateTime.now(); 
long seconds = Duration.between(date.withSecond(0).withMinute(0).withHour(0), date).getSeconds(); 

Oder einfacher Sie die LocalDateTime zu einer LocalTime Instanz umwandeln könnte und dann die toSecondOfDay() Methode anwenden:

LocalDateTime date = LocalDateTime.now(); 
int seconds = date.toLocalTime().toSecondOfDay(); 

Vom java.time.LocalTime javadoc:

public int toSecondOfDay() 

Extr wirkt, um die Zeit in Sekunden des Tages, von 0 bis 24 * 60 * 60 - 1.

+1

Dies ist die richtige Antwort, da es das Java8-Zeitpaket implementiert. Danke @davidxxx – SVCS1994

0

Sie können nur die Sekunden Minuten Stunde Felder in Sekunden konvertieren und sie addieren sich

Calendar c = new GregorianCalendar(); 
int totalSecs = c.get(Calendar.SECOND) + 60 * c.get(Calendar.MINUTE) + 3600 * c.get(Calendar.HOUR_OF_DAY); 
+4

Wenn der Fragesteller die Frage mit dem 'java.time' -Paket markiert, schlagen Sie bitte nicht vor, die lange veraltete' Kalender'-Klasse zu verwenden. Selbst wenn dieses Tag nicht vorhanden wäre, sollten Sie nicht oder zumindest nicht ohne weitere Optionen erwähnen, da die Java-API für Datum und Uhrzeit in dem erwähnten Paket viel besser, viel programmiererfreundlicher ist, sowohl im Allgemeinen als auch für das Besondere Fall. –

+1

Also obwohl ich die Antwort bekomme, die ich wollte, ist seine Lösung nicht effizient/gut genug? @ OleV.V. – SVCS1994

+0

@ SVCS1994 Verwenden Sie das 'java.time' -Paket von Java 8? Sie haben in Ihrer Frage nicht wirklich etwas anderes angegeben als das Tag, das Sie in die Irre führen könnte. –

3

ein java.time.LocalTime und java.time.temporal.ChronoField Verwendung:

// 10:00 AM 
LocalTime d = LocalTime.of(10, 0); 
System.out.println(d.get(ChronoField.SECOND_OF_DAY)); // 36000 

// 05:00 PM 
d = LocalTime.of(17, 0); 
System.out.println(d.get(ChronoField.SECOND_OF_DAY)); // 61200 

// 23:59:59 
d = LocalTime.of(23, 59, 59); 
System.out.println(d.get(ChronoField.SECOND_OF_DAY)); // 86399 

// midnight 
d = LocalTime.of(0, 0); 
System.out.println(d.get(ChronoField.SECOND_OF_DAY)); // 0 

Diese Drucke:


Hinweise:

  • Das ist nur Beispiele sind. Wenn Sie den Wert von der aktuellen Uhrzeit abrufen möchten, verwenden Sie einfach LocalTime.now() (oder wie von @Ole V.V.'s answer gezeigt).

    Als timezone-name, verwenden Sie immer IANA timezones names (immer im Format Continent/City, wie America/Sao_Paulo oder Europe/Berlin). Vermeiden Sie die 3-Buchstaben-Abkürzungen (wie CST oder), weil sie ambiguous and not standard sind.Sie können eine Liste der verfügbaren Zeitzonen erhalten (und wählen Sie diejenige, die am besten zu Ihrem System passt), indem Sie ZoneId.getAvailableZoneIds() anrufen.

  • Sie können auch d.toSecondOfDay() anrufen, wenn Sie möchten (es ist äquivalent, wie get(ChronoField) intern ruft toSecondOfDay).
+0

Problem mit dieser Lösung ist, dass ich vorher wissen muss, um welche Zeit ich die Sekunden bekommen möchte. Es wird nicht funktionieren, wenn ich die genaue Zeit nicht als Parameter an die Funktion LocalTime.of() übergebe. – SVCS1994

+2

Das sind nur Beispiele. Wenn Sie den Wert von der aktuellen Zeit erhalten möchten, verwenden Sie einfach 'LocalTime.now()' - Ich habe die Antwort aktualisiert btw –

+0

Bitte übergeben Sie eine explizite Zeitzone zu 'LocalTime.now()'. Sonst gut. –

2

Ich schlage vor:

int secondsOfDay = LocalTime.now(ZoneId.of("Europe/Rome")).toSecondOfDay(); 

Punkte zu beachten:

  • Verwenden einer expliziten Zeitzone, den Leser daran zu erinnern, und sich selbst, dass die Wahl der Zeitzone Fragen und dass Sie ein gemachter Bewusste Enscheidung. Entweder ZoneId.systemDefault(), oder noch besser ist es, wenn es in Ihrer Situation sinnvoll wäre, eine benannte Zone wie zB ZoneId.of("Europe/Rome") anzugeben.
  • Das Snippet konvertiert 10:00 AM zu 36,000, egal wann der Tag begann; wegen der Sommerzeit und anderer Anomalien hat es möglicherweise um 0:00 Uhr Mitternacht nicht begonnen, und es kann eine Lücke oder Überlappung früh am Morgen geben. Um die tatsächliche Anzahl von Sekunden seit Beginn des Tages zu ermitteln, benötigen Sie eine Berechnung mit .
Verwandte Themen