2010-10-28 37 views
6

Quiero convertir un objeto Joda Time UTC DateTime a la hora local.Hora Joda: Convertir UTC a local

Aquí hay una manera laboriosa de hacerlo que parece funcionar. Pero debe haber una mejor manera.

Aquí está el código (en Scala) sin declaraciones de los alrededores:

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 
    } 

Aquí está la salida:

dtUTC = 2010-10-28T04: 00: 00.000 + 11: 00 locales = 2010- 10-28T15: 00: 00,000 + 11: 00

Respuesta

8

Esto es lo que uso en un proyecto actual.

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

¿Eso le ayuda?

EDIT:

Aquí es algo que toma tiempo en el TZ actual y se convierte en el tiempo de Brisbane. Puedes usar el mismo 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

Perfecto. Lo adapté un poco más al sur, a Melbourne. – Koala3

Cuestiones relacionadas