2010-10-28 16 views
6

Desidero convertire un oggetto DateTime UTC Joda Time in ora locale.Joda Time: Convertire UTC in locale

Ecco un modo laborioso di farlo che sembra funzionare. Ma ci deve essere un modo migliore.

Ecco il codice (in Scala), senza dichiarazioni circostanti:

val dtUTC = new DateTime("2010-10-28T04:00") 
    println("dtUTC = " + dtUTC) 
    val dtLocal = timestampLocal(dtUTC) 
    println("local = " + dtLocal) 

def timestampLocal(dtUTC: DateTime): String = { 
    // This is a laborious way to convert from UTC to local. There must be a better way. 
    val instantUTC = dtUTC.getMillis 
    val localDateTimeZone = DateTimeZone.getDefault 
    val instantLocal = localDateTimeZone.convertUTCToLocal(instantUTC) 
    val dtLocal = new DateTime(instantLocal) 
    dtLocal.toString 
    } 

ecco l'output:

dtUTC = 2010-10-28T04: 00: 00.000 + 11: 00 locale = 2010- 10-28T15: 00: 00.000 + 11: 00

risposta

8

Ecco cosa utilizzo in un progetto corrente.

val marketCentreTime = timeInAnotherTimezone.withZone(DateTimeZone.forID("Australia/Melbourne")) 

Questo aiuto?

EDIT:

Ecco qualcosa che richiede un tempo nel TZ corrente e converte in tanto Brisbane. Puoi usare lo stesso principio.

Welcome to Scala version 2.8.0.final (Java HotSpot(TM) Client VM, Java 1.6.0_21). 
Type in expressions to have them evaluated. 
Type :help for more information. 

scala> import org.joda.time._            
import org.joda.time._ 

scala> def timestampBrisbane(date: DateTime): String = {      
    | date.withZone(DateTimeZone.forID("Australia/Brisbane")).toString 
    | } 
timestampBrisbane: (date: org.joda.time.DateTime)String 

scala> val date = new DateTime 
date: org.joda.time.DateTime = 2010-10-28T16:22:03.481+11:00 

scala> val dateBrisbane = timestampBrisbane(date) 
dateBrisbane: String = 2010-10-28T15:22:03.481+10:00 
+0

Perfetto. L'ho adattato un po 'più a sud, a Melbourne. – Koala3