wake-up-neo.net

Konvertierung von String im T-Z-Format in Date

Mögliche Lösung: Java-Datum in ein anderes Uhrzeitformat umwandeln

Ich habe es durchgesehen, bekomme aber keine Antwort.

Ich habe eine Zeichenfolge "2013-07-17T03: 58: 00.000Z" und möchte sie in ein Datum derselben Form konvertieren, die wir erhalten, wenn wir ein neues Datum () erstellen. ;

Die Zeit sollte in IST.Zone-Asia/Kolkata liegen

Das Datum für den obigen String sollte also sein 

Mi Jul 17 12:05:16 IST 2013 // Wie auch immer die Zeit nach dem indischen Standard GMT + 0530 ist

String s="2013-07-17T03:58:00.000Z";
DateFormat formatter = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSZ"); 
TimeZone tx=TimeZone.getTimeZone("Asia/Kolkata");
formatter.setTimeZone(tx);
d= (Date)formatter.parse(s);
15
user2511713

Verwenden Sie den Kalender für Zeitzonen.

TimeZone tz = TimeZone.getTimeZone("Asia/Calcutta");
Calendar cal = Calendar.getInstance(tz);
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'")
sdf.setCalendar(cal);
cal.setTime(sdf.parse("2013-07-17T03:58:00.000Z"));
Date date = cal.getTime();

Dafür würde ich jedoch Joda Time empfehlen, da es für diese Situation bessere Funktionen hat. Für JodaTime können Sie so etwas tun:

DateTimeFormatter dtf = DateTimeFormat.forPattern("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'");
DateTime dt = dtf.parseDateTime("2013-07-17T03:58:00.000Z");
Date date = dt.toDate();
22
Mark M

Ein Datum hat keine Zeitzone. Wenn Sie wissen möchten, was die Zeichenfolgendarstellung des Datums in der indischen Zeitzone ist, verwenden Sie ein anderes SimpleDateFormat, dessen Zeitzone auf Indian Standard festgelegt ist, und formatieren Sie das Datum mit diesem neuen SimpleDateFormat.

EDIT: Codebeispiel:

String s = "2013-07-17T03:58:00.000Z";
DateFormat formatter = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSX");
Date d = formatter.parse(s);

System.out.println("Formatted Date in current time zone = " + formatter.format(d));

TimeZone tx=TimeZone.getTimeZone("Asia/Calcutta");
formatter.setTimeZone(tx);
System.out.println("Formatted date in IST = " + formatter.format(d));

Ausgabe (aktuelle Zeitzone ist Paris - GMT + 2):

Formatted Date in current time zone = 2013-07-17T05:58:00.000+02
Formatted date in IST = 2013-07-17T09:28:00.000+05
4
JB Nizet

Java.time

Ich möchte die moderne Antwort geben. Und geben Sie einen Vorschlag: Anstatt zu reproduzieren, was Date.toString() Ihnen gegeben hätte, verwenden Sie besser das integrierte Format für Benutzer in der entsprechenden Ländereinstellung:

    String isoString = "2013-07-17T03:58:00.000Z";
    String humanReadable = Instant.parse(isoString)
            .atZone(userTimeZone)
            .format(localizedFormatter);
    System.out.println(humanReadable);

Auf meinem Computer wird dies gedruckt

17 July 2013 at 09.28.00 IST

Mein Ausschnitt verwendet einige Konstanten

private static final ZoneId userTimeZone = ZoneId.of("Asia/Kolkata");
private static final DateTimeFormatter localizedFormatter = DateTimeFormatter
        .ofLocalizedDateTime(FormatStyle.LONG)
        .withLocale(Locale.getDefault(Locale.Category.FORMAT));

Der Aufruf withLocale ist redundant, wenn wir nur das Standardgebietsschema übergeben. Ich habe es so eingefügt, dass Sie einen Ort haben, an dem Sie ein explizites Gebietsschema angeben können, falls Ihre Benutzer ein anderes benötigen. Es hat auch den Vorteil, dass Nizza deutlich macht, dass das Ergebnis vom Gebietsschema abhängt, falls jemand, der Ihren Code liest, nicht daran denkt.

Ich benutze Java.time, die moderne Java-API für Datum und Uhrzeit. Es ist so viel schöner, mit der veralteten Date, TimeZone und den notorisch lästigen DateFormat und SimpleDateFormat zu arbeiten. Ihre Zeichenfolge entspricht dem Standard ISO 8601, einem Format, das von den modernen Klassen standardmäßig als Standard definiert wird, dh ohne explizite Formatierung.

Das gleiche Format wie bei Date

Natürlich können Sie dasselbe Format verwenden, das Ihnen die Date gegeben hätte, wenn Sie dies wünschen. Ersetzen Sie einfach das obige Formatierungsprogramm durch dieses Format:

private static final DateTimeFormatter asUtilDateFormatter 
        = DateTimeFormatter.ofPattern("EEE MMM dd HH:mm:ss zzz yyyy", Locale.ROOT);

Jetzt bekommen wir:

Wed Jul 17 09:28:00 IST 2013

Link zum Tutorial

Weitere Informationen zur Verwendung von Java.time finden Sie in dem Oracle-Lernprogramm und/oder finden Sie weitere Ressourcen.

0
Ole V.V.