webentwicklung-frage-antwort-db.com.de

Wie kann ich einen Zeitstempel aus dem Format jjjj-MM-tthh: mm: ss: SSSZ in das Format MM/tt/jjjj hh: mm: ss.SSS konvertieren? Von ISO8601 bis UTC

Ich möchte den Zeitstempel 2011-03-10T11: 54: 30.207Z in 10/03/2011 11: 54: 30.207 konvertieren. Wie kann ich das machen? Ich möchte das ISO8601-Format in UTC konvertieren und dann sollte diese UTC standortbezogen sein. Bitte helfen

String str_date="2011-03-10T11:54:30.207Z";
DateFormat formatter ;
Date date ;
formatter = new SimpleDateFormat("dd/MM/yyyy hh:mm:ss.SSS");
date = (Date)formatter.parse(str_date);
System.out.println("output: " +date );

Ausnahme: Java.text.ParseException: Datum für nicht analysierbare Daten: "2011-03-10T11: 54: 30.207Z"

26
user617966

Erstens müssen Sie wissen, dass UTC kein Format ist, sondern effektiv eine Zeitzone. Daher ist die Umstellung von ISO8601 auf UTC als Konzept nicht wirklich sinnvoll.

Hier ist jedoch ein Beispielprogramm mit Joda Time, das den Text in eine DateTime parst und dann formatiert. Ich habe an das Format " a " geraten, das Sie verwenden möchten - Sie haben nicht wirklich genug Informationen darüber angegeben, was Sie versuchen, um mehr zu sagen. Sie können auch Zeitzonen in Betracht ziehen ... Möchten Sie die local -Zeit zum angegebenen Zeitpunkt anzeigen? In diesem Fall müssen Sie die Zeitzone des Benutzers ermitteln und entsprechend konvertieren.

import org.joda.time.*;
import org.joda.time.format.*;

public class Test {
    public static void main(String[] args) {
        String text = "2011-03-10T11:54:30.207Z";
        DateTimeFormatter parser = ISODateTimeFormat.dateTime();
        DateTime dt = parser.parseDateTime(text);

        DateTimeFormatter formatter = DateTimeFormat.mediumDateTime();
        System.out.println(formatter.print(dt));
    }
}
31
Jon Skeet

Ja. Sie können SimpleDateFormat so verwenden.

SimpleDateFormat formatter, FORMATTER;
formatter = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'");
String oldDate = "2011-03-10T11:54:30.207Z";
Date date = formatter.parse(oldDate.substring(0, 24));
FORMATTER = new SimpleDateFormat("dd-MMM-yyyy HH:mm:ss.SSS");
System.out.println("OldDate-->"+oldDate);
System.out.println("NewDate-->"+FORMATTER.format(date));

Ausgabe OldDate -> 2011-03-10T11: 54: 30.207Z NewDate -> 10-Mar-2011 11: 54: 30.207

29
user617966

Hoffe das hilft:

public String getSystemTimeInBelowFormat() {
    String timestamp = new SimpleDateFormat("yyyy-mm-dd 'T' HH:MM:SS.mmm-HH:SS").format(new Date());
    return timestamp;
}
0
Abdul K Shaikh

Vielleicht möchten Sie einen Blick auf joda time werfen, was etwas einfacher zu verwenden ist als die nativen Java-Date-Tools und viele vorgefertigte gängige Datumsmuster bietet.

Als Antwort auf die Kommentare, genauer:

Um dies unter Verwendung der Joda-Zeit zu erreichen, benötigen Sie zwei DateTimeFormatters - eines für Ihr Eingabeformat zum Analysieren Ihrer Eingabe und eines für Ihr Ausgabeformat, um Ihre Ausgabe zu drucken. Ihr Eingabeformat ist ein ISO-Standardformat. Daher verfügt die ISODateTimeFormat-Klasse von Joda time bereits über eine statische Methode mit einem Parser: dateHourMinuteSecondMillis . Für Ihr Ausgabeformat gibt es kein Format, für das sie einen vordefinierten Formatierer haben. Sie müssen also selbst ein Format erstellen, indem Sie DateTimeFormat verwenden. Ich denke, DateTimeFormat.forPattern("mm/dd/yyyy kk:mm:ss.SSS"); sollte den Trick tun. Wenn Sie Ihre beiden Formatierer haben, rufen Sie die parseDateTime()-Methode für das Eingabeformat und die print-Methode für das Ausgabeformat auf, um Ihr Ergebnis als String abzurufen.

Wenn Sie es zusammenstellen, sollte es ungefähr so ​​aussehen (Warnung, nicht getestet):

DateTimeFormatter input = ISODateTimeFormat.dateHourMinuteSecondMillis();
DateTimeFormatter output = DateTimeFormat.forPattern("mm/dd/yyyy kk:mm:ss.SSS");
String outputFormat = output.print( input.parseDate(inputFormat) );
0
Mark Tozzi

Geben Sie das Originaldatum in eine Date-Objekt ein und drucken Sie das Ergebnis mit einer DateFormat aus. Möglicherweise müssen Sie die Zeichenfolge in kleinere Teile aufteilen, um das ursprüngliche Date-Objekt zu erstellen, wenn die automatische Parsemethode Ihr Format nicht akzeptiert.

Pseudocode:

Date inputDate = convertYourInputIntoADateInWhateverWayYouPrefer(inputString);
DateFormat outputFormat = new SimpleDateFormat("MM/dd/yyyy hh:mm:ss.SSS");
String outputString = outputFormat.format(inputDate);
0
Pops