2013-01-04 13 views
7

Ich muss das Datum in eine bestimmte Zeichenfolge formatieren.Android-Format Datum mit Zeitzone

verwenden ich SimpleDateFormat Klasse das Datum zu formatieren, um das Muster mit „yyyy-MM-dd'T'HH:mm:ssZ“ es gibt aktuelles Datum als
2013-01-04T15:51:45+0530“ aber ich brauche als
2013-01-04T15:51:45+05:30“.

Unten finden Sie die Codierung verwendet,

Calendar c = Calendar.getInstance(); 
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssZ", Locale.ENGLISH);  
Log.e(C.TAG, "formatted string: "+sdf.format(c.getTime())); 

Ausgabe: formatiert string: 2013-01-04T15:51:45+0530

ich das Format als 2013-01-04T15:51:45+05:30 gerade hinzufügen, den Doppelpunkt zwischen gmt Zeit benötigen.

Da ich am Google-Kalender arbeite, um ein Ereignis einzufügen, akzeptiert es nur das erforderliche Format, das ich erwähnt habe.

+0

Ich glaube nicht, dass Sie mit einem simplydateformat können. Sie müssen also '' 'manuell einfügen. [Java 7 hat die Markierung 'X' eingeführt] (http://docs.oracle.com/javase/7/docs/api/java/text/SimpleDateFormat).html), die mehr Formatierungsoptionen als 'Z' hat, aber es ist nicht auf Android verfügbar (noch?). – assylias

+0

Wenn die Formatierung manuell ausgeführt werden soll (in Bezug auf den obigen Kommentar), können Sie nach dem letzten '+' suchen und dann ein ':' nach 2 Indizes hinzufügen. –

+0

@KazekageGaara Es könnte auch ein '-' sein ... – assylias

Antwort

9

Sie können stattdessen Joda Time verwenden. Sein DateTimeFormat hat ein ZZ Formatattribut, das tut, was Sie wollen.

Link

Ein großer Vorteil: Im Gegensatz zu SimpleDateFormat, DateTimeFormatter ist Thread-sicher. Verwendung:

DateTimeFormatter fmt = DateTimeFormat.forPattern("yyyy-MM-dd'T'HH:mm:ssZZ") 
    .withLocale(Locale.ENGLISH); 
+0

Ich fand eine etwas andere Art, dies zu tun, gegeben: DateTime my_date = new DateTime(); ... Stellen Sie das Datum etwas my_date = ... Dann formatieren Sie es mit:. String curr_date = my_date.toLocalDate() toString ("yyyy-MM-dd"); – Brandon

+0

hast du versucht, yyyy-MM-dd'T'HH: mm: ssXXX' –

+0

@fge "ZZ" gelöst zu mir. Vielen Dank! ;) –

1

Was Sie tun können, ist nur die ":" manuell mit substring() hinzufügen. Ich habe das früher gesehen und diese Lösung funktioniert.

1

Try this

Calendar c = Calendar.getInstance(); 
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssZ", Locale.ENGLISH); 

System.out.println("formatted string: "+sdf.format(c.getTime())); 

String text = sdf.format(c.getTime()); 
String result = text.substring(0, 22) + ":" + text.substring(22); 
System.out.println("result = " + result); 
1

Warum nicht einfach mit regexp manuell tun?

String oldDate = "2013-01-04T15:51:45+0530"; 
String newDate = oldDate.replaceAll("(\\+\\d\\d)(\\d\\d)", "$1:$2"); 

Gleiches Ergebnis, mit Teilzeichenfolge (wenn Leistung ein Problem ist).

String oldDate = "2013-01-04T15:51:45+0530"; 
int length = oldDate.length(); 
String newDate = oldDate.substring(0, length - 2) + ':' + oldDate.substring(length - 2); 
0

diesen Code Versuchen

Calendar c = Calendar.getInstance(); 
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss Z", Locale.ENGLISH); 
String s = sdf.format(c.getTime()); 
String fDate = s.substring(0, s.length()-2) +":"+s.substring(s.length()-2, s.length()); 
Log.e("check", "formatted string: "+fDate); 
24

Sie auch "ZZZZZ" anstelle von "Z" in Ihrem Muster (nach documentation) verwenden können. So etwas wie dieses

Calendar c = Calendar.getInstance(); 
    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssZZZZZ", Locale.ENGLISH);  
    Log.e(C.TAG, "formatted string: "+sdf.format(c.getTime())); 
+1

Dies ist die richtige Antwort, @fargath sollten Sie es markieren. – VAdaihiep

+0

Dies sollte die richtige Antwort sein. Ich finde es lächerlich, wenn Leute Bibliotheken als primäre Lösung betrachten, anstatt dass es sich um einen sekundären Vorschlag handelt. Es ist wie Stoff mit einem Schwert zu fädeln. – humblerookie

+0

Die Dokumentation sagt, es unterstützt X. – rozina

0

einfach diesen Code Refactoring und ersetzen Sie die 'Locale.getDefault()' mit dem Locale Sie benötigen

private SimpleDateFormat getDateFormat() { 
    SimpleDateFormat dateFormat = (SimpleDateFormat) SimpleDateFormat.getDateTimeInstance(SimpleDateFormat.SHORT, SimpleDateFormat.DEFAULT, Locale.getDefault()); 
    String pattern = dateFormat.toLocalizedPattern(); 
    pattern = pattern.trim(); 
    dateFormat.applyLocalizedPattern(pattern); 
    return dateFormat; 
} 

// Und hier ist die Nutzung

Simple sdf = getDateFormat();

sdf.format (neues Datum());