2014-10-29 37 views
7

Ich möchte umwandeln String myDate = "2014/10/29 18:10:45" zu long ms (i.e. currentinmlilies)? Ich suche es bei Google, aber ich kann nur finden, wie man ms zu Datum umwandelt.Wie konvertiert man ein Datum in Millisekunden

Hinweis: Um es klar zu machen, möchte ich die ms vom Datum im 1970/1/1 Format bekommen.

+1

SimpleDateFormat ist Ihr Freund. – user2336315

+0

Wie würden Sie ein Datum in Millisekunden konvertieren, meinst du Zeit? – brso05

+0

Auch Sie sagen ms bis heute? – brso05

Antwort

27

Sie haben keine Date, Sie haben eine String Darstellung eines Datums. Sie sollten die String in eine Date konvertieren und dann die Millisekunden erhalten. Um eine String in eine Date und umgekehrt umzuwandeln, sollten Sie SimpleDateFormat Klasse verwenden.

Hier ist ein Beispiel dafür, was Sie wollen/müssen (vorausgesetzt, Zeitzone hier nicht beteiligt ist) zu tun:

String myDate = "2014/10/29 18:10:45"; 
SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss"); 
Date date = sdf.parse(myDate); 
long millis = date.getTime(); 

Dennoch vorsichtig sein, da in Java die erhaltenen Millisekunden die Millisekunden zwischen der gewünschten Epoche sind und 1970-01-01 00:00:00.

3

Die Klasse SimpleDateFormat ermöglicht die Analyse eines String in ein java.util.Date Objekt. Sobald Sie das Date-Objekt haben, können Sie die Millisekunden seit der Epoche abrufen, indem Sie Date.getTime() aufrufen.

Das vollständige Beispiel:

String myDate = "2014/10/29 18:10:45"; 
//creates a formatter that parses the date in the given format 
SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss"); 
Date date = sdf.parse(myDate); 
long timeInMillis = date.getTime(); 

Beachten Sie, dass dies gibt Ihnen eine long und nicht ein Doppelzimmer, aber ich denke, das ist wahrscheinlich das, was Sie bestimmt. In der Dokumentation für die Klasse SimpleDateFormat finden Sie Informationen darüber, wie Sie sie für das Parsen verschiedener Formate einrichten können.

1

Zeitzone

Die akzeptierte Antwort ist richtig, mit der Ausnahme, dass sie die entscheidende Frage der Zeitzone ignoriert. Ist Ihr Eingabe-String 18:10 in Paris oder Montréal? Oder UTC?

Verwenden Sie eine proper time zone name. Normalerweise ein Kontinent plus Stadt/Region. Zum Beispiel "Europe/Oslo". Vermeiden Sie die 3- oder 4-Buchstaben-Codes, die weder standardisiert noch eindeutig sind.

Joda-Time

Unten ist die gleiche Art von Code, sondern mit der Joda-Time 2.5 Bibliothek und Zeitzone Handhabung.

Die Klassen java.util.Date, .Calendar und .SimpleDateFormat sind bekanntermaßen mühsam, verwirrend und fehlerhaft. Vermeide sie. Verwenden Sie entweder Joda-Time oder die java.time Paket (inspiriert von Joda-Time) gebaut in Java 8.

ISO 8601

Ihre Zeichenfolge fast im ISO 8601-Format ist. Die Schrägstriche müssen Bindestriche sein und der SPACE in der Mitte sollte durch einen T ersetzt werden. Wenn wir das optimieren, kann der resultierende String direkt in den Konstruktor eingegeben werden, ohne dass ein Formatierer angegeben werden muss. Joda-Time verwendet ISO 8701-Formate als Standard für das Parsen und Erzeugen von Strings.

Beispielcode

String inputRaw = "2014/10/29 18:10:45"; 
String input = inputRaw.replace("/", "-").replace(" ", "T"); 
DateTimeZone zone = DateTimeZone.forID("Europe/Oslo"); // Or DateTimeZone.UTC 
DateTime dateTime = new DateTime(input, zone); 
long millisecondsSinceUnixEpoch = dateTime.getMillis(); 
+0

Welche DateTimeZone ID gibt es in Norwegen? Es ist etwas über GMT +1, ich bin mir nicht sicher. – HydroTekZ

+0

@HydroTekZ Siehe Bearbeiten. –

2

Die 2017 Antwort lautet: Verwenden Sie das Datum und die Zeit in Java eingeführten Klassen 8 (und auch 6 und 7 in den ThreeTen Backport auf Java zurückportiert).

Wenn Sie das Datum-Zeit-String in der Computerzeitzone interpretieren wollen:

long millisSinceEpoch = LocalDateTime.parse(myDate, DateTimeFormatter.ofPattern("uuuu/MM/dd HH:mm:ss")) 
      .atZone(ZoneId.systemDefault()) 
      .toInstant() 
      .toEpochMilli(); 

Wenn eine andere Zeitzone, füllen diese Zone in statt ZoneId.systemDefault(). Wenn UTC, verwenden Sie

long millisSinceEpoch = LocalDateTime.parse(myDate, DateTimeFormatter.ofPattern("uuuu/MM/dd HH:mm:ss")) 
      .atOffset(ZoneOffset.UTC) 
      .toInstant() 
      .toEpochMilli(); 
+0

LocalDateTime ist nicht definiert –

+0

Danke für die Rückmeldung, @YASHDAVE. Sie müssen 'LocalDateTime' importieren. Wenn Sie Java 8 oder höher verwenden, verwenden Sie einfach 'import java.time.LocalDateTime' ;. Wenn Sie Java 6 oder 7 haben, rufen Sie den ThreeTen Backport auf, mit dem ich in der Antwort verlinkt bin, und verwenden Sie dann 'import org.threeten.bp.LocalDateTime;'. –

Verwandte Themen