2010-10-28 12 views
6

Chcę przekształcić obiekt DateTime Joda Time UTC na czas lokalny.Joda Czas: Konwertuj UTC na lokalny

Oto żmudny sposób na zrobienie tego, co wydaje się działać. Ale musi być lepszy sposób.

Oto kod (w Scala) bez otaczających deklaracji:

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 
    } 

Oto wynik:

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

Odpowiedz

8

Oto, czego używam w bieżącym projekcie.

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

Czy to pomaga?

EDIT:

Oto coś, co zajmuje czas w bieżącym TZ i konwertuje do czasu Brisbane. Możesz użyć tej samej zasady.

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

Idealny. Zaadaptowałem go nieco dalej na południe, do Melbourne. – Koala3

Powiązane problemy