2017-06-12 4 views
-11

Wie Millisekunden zu Date-Objekt in JJJJ-MM-TT HH ändern: mm: SS-Format wie 2017-04-12 23:14 : 52?So ändern Sie die Millilisekunde in Date-Objekt in JJJJ-MM-TT HH: MM: SS-Format

+0

Bitte geben Sie die Eingabe Millisekunden? –

+6

Verstehst du, dass ein "Date" -Objekt kein Format hat? Bitte lesen Sie https://codeblog.jonskeet.uk/2017/04/23/all-about-java-util-date/ –

+0

Ich hoffe, diese Antwort wird Ihnen helfen https://stackoverflow.com/questions/4142313/java- Konvertieren-Millisekunden-zu-Zeit-Format –

Antwort

0

Sie können diesen Beispielcode ausprobieren.

public class MillDateConverter { 

    public static String dFormat = "yyy-MM-dd HH:mm:ss"; 
    private static SimpleDateFormat simpleDateFormat = new SimpleDateFormat(dFormat); 


    public static void main(String[] args) { 
     Calendar calendar = Calendar.getInstance(); 
     long milliSec=Long.parseLong("1086073200000"); 
     System.out.println(milliSec); 
     calendar.setTimeInMillis(milliSec); 
     System.out.println(simpleDateFormat.format(calendar.getTime())); 

    } 

} 
+0

Dadurch bekomme ich String simpleDateFormat.format (calendar.getTime()) gibt String zurück, aber ich will java.utill.Date Object. Ich habe versucht, simpleDateFormat.format (calendar.getTime())) nach dem Erhalt der String, aber dann bekomme ich Di 25. April 23:52:17 IST 2017 Format, das ich nicht will –

+0

Sie fragen das Unmögliche, oder vielleicht eher , das sich widersprechende, @NilenduKumar. Ein 'java.util.Date' Objekt hat kein Format und kann kein Format haben. Es ist ein Zeitpunkt, nichts mehr. –

2

Sie können das nicht tun. Aus ein paar Gründen.

TL; DR: Verwenden Sie Date nicht, Instant verwenden. Keiner von diesen kann ein Format in ihnen haben. Die Formatierung in eine Zeichenfolge hängt von der Zeitzone ab. Daher müssen Sie eine Zeitzone auswählen.

Zuerst verstehe ich aus der Diskussion, dass Sie für ein java.util.Date Objekt mit dem Format yyyy-MM-dd HH:mm:ss fragen. Ein Date Objekt hat kein Format und kann kein Format haben. Was Sie hier versuchen sollten, ist der Unterschied zwischen den Daten selbst und der Präsentation der Daten für einen Benutzer. Eine int kann den Wert 25389 enthalten, aber nicht im Format 25389 (die interne Darstellung unterscheidet sich tatsächlich von 25389). Das gleiche int kann einem Benutzer als 25389, 000025389, 25389 oder +25389 präsentiert werden, um nur einige von vielen Möglichkeiten zu nennen. Die Formatierung geschieht außerhalb der int, während die int gleich bleibt.

In ähnlicher Weise enthält ein Date Objekt einen Zeitpunkt. Das gleiche Datum kann zum Beispiel 2017-04-12 23:14:52 oder 12. April 2017 11:14:52 PM formatiert werden. Es kann sogar für verschiedene Zeitzonen formatiert werden, was eine gute Idee wäre, wenn das System Benutzer in verschiedenen Zeitzonen hat. Alternativ können wir dem Benutzer ein Kalenderblatt und/oder eine Uhrzeit zeigen. Auch hier geschieht die Formatierung außerhalb der Date, während die Date bleibt gleich.

Bei der Zeitzonenausgabe konnte der gleiche Zeitpunkt, der durch den gleichen Millisekundenwert dargestellt wurde, in 2017-04-12 17:44:52 in UTC, 2017-04-12 19:44:52 in formatiert werden meine Zeitzone, 2017-04-12 23:14:52 in Asien/Kolkata Zeitzone oder sogar 2017-04-13 05:44:52 in Pacific/Auckland Zeitzone. Beachten Sie, dass im letzten Fall nicht einmal das Datum identisch ist. Es gibt also nicht nur eine Möglichkeit, Ihre Millisekunden in das von Ihnen gewünschte Format zu ändern. Wir müssen wissen, in welcher Zeitzone Sie es wünschen, bevor wir Ihnen helfen können.

Also, was ich glaube, Sie brauchen, ist nicht eine Sache, aber zwei

  1. Ein Weg, um Ihren Zeitpunkt in Ihrem Programm zu speichern.
  2. Eine Möglichkeit, Ihren Zeitpunkt in eine Zeichenfolge in JJJJ-MM-TT HH: MM: SS-Format für einen Benutzer in einer bestimmten Zeitzone zu formatieren.

Für Ihren Zeitpunkt zu speichern, verwenden Sie ein

  • A long für die Millisekunden Wert, den Sie bereits
  • A java.time.Instant Objekt haben.

Warum habe ich nicht erwähnt java.util.Date? Weil diese Klasse längst veraltet ist. Sein Design erwies sich sehr schnell als störend. Sie versuchten es zu reparieren, indem sie die meisten Methoden ablehnten und java.util.Calendar einführten, aber das funktionierte auch nicht sehr gut.Basierend auf den Erfahrungen aus einer Bibliothek namens Joda-Time führten sie 2014 die Klassen java.time in Java 8 ein. Das ist vor drei Jahren, als wir geschrieben und gezählt haben. Also IMHO sollten wir jetzt Date und Freunde über Bord geworfen haben und angefangen haben, die neueren Klassen zu verwenden. Also lieber Instant über Date.

Ändern Millisekunden auf eine Instant ist einfach:

long milliseconds = 1492019092000L; 
    Instant pointInTime = Instant.ofEpochMilli(milliseconds); 

Für Ihre sofortige in eine Zeichenfolge für den Benutzer die Formatierung, wie gesagt, wir eine Zeitzone erfordern. Dann tun

DateTimeFormatter formatter = DateTimeFormatter.ofPattern("uuuu-MM-dd HH:mm:ss"); 
    String formattedDateTimeString = pointInTime.atZone(ZoneId.of("Asia/Kolkata")) 
      .format(formatter); 

Sie müssen also in der gewünschten Zeitzone zu füllen, wo ich ZoneId.of("Asia/Kolkata") setzen. Wenn Sie die aktuelle Zeitzoneneinstellung des JVM verwenden möchten, geben Sie einfach ZoneId.systemDefault() ein. Beachten Sie jedoch, dass die Einstellung der Zeitzone auch von einem nicht verwandten Programm geändert werden kann, das in derselben JVM ausgeführt wird.

Das Ergebnis des obigen Codeausschnitt ist eine Zeichenkette wie

2017-04-12 23:14:52 

PS Wenn nach der obigen Sie wirklich darauf bestehen, ist hier zu lesen, wie ein java.util.Date von oben zu bekommen:

Date myOutdatedDateInstance = Date.from(pointInTime); 

(und entschuldige mich für das Wiederholen, es hat immer noch nicht das gewünschte Format, das ist nicht möglich).

Verwandte Themen