2013-01-04 26 views
7

Ho bisogno di formattare la data in una stringa specifica.Formato Android con fuso orario

ho usato SimpleDateFormat classe per formattare la data utilizzando il modello "yyyy-MM-dd'T'HH:mm:ssZ" che restituisce la data corrente come
"2013-01-04T15:51:45+0530" ma ho bisogno come
"2013-01-04T15:51:45+05:30".

Di seguito si riporta la codifica utilizzata,

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())); 

uscita: stringa formattata: 2013-01-04T15:51:45+0530

ho bisogno del formato 2013-01-04T15:51:45+05:30 semplicemente aggiungendo i due punti tra ora GMT.

Poiché sto lavorando al calendario di Google per inserire un evento, accetta solo il formato richiesto che ho menzionato.

+0

Non penso che sia possibile con un semplice formato. Quindi dovrai inserire ':' manualmente. [Java 7 ha introdotto il marcatore 'X'] (http://docs.oracle.com/javase/7/docs/api/java/text/SimpleDateFormat.html) che ha più opzioni di formattazione di 'Z' ma non è disponibile su Android (ancora?). – assylias

+0

Se la formattazione manuale è il compito da svolgere (in riferimento al commento precedente), è possibile cercare l'ultimo '+' e quindi aggiungere un ':' dopo 2 indici. –

+0

@KazekageGaara Potrebbe anche essere un '-' ... – assylias

risposta

9

È possibile utilizzare invece Joda Time. Il suo DateTimeFormat ha un attributo di formato ZZ che fa quello che vuoi.

Link

Grande vantaggio: a differenza SimpleDateFormat, DateTimeFormatter è thread-safe. Utilizzo:

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

Ho trovato un modo leggermente diverso di farlo, dato il: DateTime my_date = new DateTime(); ... Impostare la data a qualcosa my_date = ... Poi formattarla con:. String = curr_date my_date.toLocalDate() toString ("yyyy-MM-dd"); – Brandon

+0

hai provato 'aaaa-MM-gg'T'HH: mm: ssXXX' –

+0

@fge" ZZ "risolto per me. Grazie! ;) –

1

Quello che puoi fare è semplicemente aggiungere ":" manualmente usando la sottostringa(). Ho affrontato questo prima e questa soluzione funziona.

1

Prova questa

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

Perché non farlo manualmente con regexp?

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

Stesso risultato, con sottostringa (se le prestazioni sono un problema).

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

provare questo codice

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

È inoltre possibile utilizzare "ZZZZZ" al posto di "Z" nel vostro modello (secondo documentation). Qualcosa di simile

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

Questa è la risposta corretta, @fargath dovresti contrassegnarlo. – VAdaihiep

+0

Questa dovrebbe essere la risposta corretta. Trovo ridicolo quando le persone si riferiscono alle biblioteche come a una soluzione primaria invece di essere un suggerimento secondario. È come infilare una tela con una spada. – humblerookie

+0

La documentazione dice che supporta X. – rozina

0

Semplicemente refactoring questo codice e sostituire il 'Locale.getDefault()' con le impostazioni internazionali è necessario

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; 
} 

// E qui è l'utilizzo

SimpleDateFormat sdf = GetDateFormat();

sdf.format (nuova Data());