2013-02-07 16 views
16

Come posso ottenere il seguente formato:JodaTime DateTime, data ISO8601 GMT formato

2015-01-31T00:00:00Z 

(ISO8601 GMT formato della data)

Su un oggetto DateTime in tempo Joda (Java)? Per esempio.

DateTime time = DateTime.now(); 
String str = // Get something like 2012-02-07T00:00:00Z 

Grazie! :)

+3

Come questo non è chiaro? Ha definito esattamente ciò che desiderava. – vikingsteve

risposta

28

Il JODA Javadoc indica che toString per DateTime emette la data in ISO8601. Se avete bisogno di avere tutti i campi di tempo azzerato, fare questo:

final DateTime today = new DateTime().withTime(0, 0, 0, 0); 
System.out.println(today); 

che includerà millisecondi nella stringa di output. Per sbarazzartene dovrai utilizzare il formattatore che @jgm suggerisce qui.

Se si vuole che corrisponde al formato che si sta chiedendo in questo post (con il Z carattere letterale) questo dovrebbe funzionare:

System.out.println(today.toString(DateTimeFormat.forPattern("yyyy-MM-dd'T'HH:mm:ss'Z'"))); 

Se è necessario il valore di essere UTC, inizializzarlo come questo :

final DateTime today = new DateTime().withZone(DateTimeZone.UTC).withTime(0, 0, 0, 0); 
+0

Modifica: funziona perfettamente. –

+1

Dovrebbe esserci una seconda quota singola dopo ': ss'Z" '? ​​ – spuder

+0

Cosa succede se la stringa ha un offset in esso, ho bisogno di analizzare la stringa per ottenere una data senza offset 'DateTime today = new DateTime ("07-07-2015T05: 04: 30-05: 30"); System.out.println (today.toString (DateTimeFormat.forPattern ("yyyy-MM-dd'T'HH: mm: ss"))) ; "dà un risultato come questo" 2016-07-11T05: 34: 30 "in cui il campo min è alterato @petter kjelkenes – striker

2

Impostare una DateTimeFormatter:

DateTimeFormatter formatter = DateTimeFormat.forPattern("yyyy-MM-dd'T'HH:mm:ssZ"); 
formatter.print(time); 
3

uso ISODateTimeFormat

DateTime dt = new DateTime(); 
DateTimeFormatter fmt = ISODateTimeFormat.dateTimeNoMillis(); 
String str = fmt.print(dt); 
+0

Nota che ISODateTimeFormat.dateTime() termina in ZZ non Z. C'è una differenza (ZZ antepone i due punti). – jgm

+0

Sebbene non sia assolutamente chiaro a cosa si riferisca esattamente il petter, il tuo esempio differisce dal suo esempio: include millisecondi nell'output e utilizza il fuso orario predefinito al posto di UTC. – jarnbjo

4

@jgm Nel documento, viene descritto ISODateTimeFormat.dateTime()

Restituisce un formattatore che combina una data e un'ora complete, separate da un 'T' (aaaa-MM-gg'T'HH: mm: ss.SSSZZ).

ma se si imposta il fuso orario, per esempio,

DateTimeFormatter fmt = ISODateTimeFormat.dateTime(); 
System.out.println(fmt.print(new DateTime().toDateTime(DateTimeZone.UTC))); 

si finisce in Z.

+0

manca una sola risposta o anche:' fmt. stampa (DateTime.now (DateTimeZone.UTC)) ' – vikingsteve