2010-10-28 7 views
6

Я хочу конвертировать объект времени UTC Date Time в локальное время.Joda Время: Конвертировать UTC в local

Вот кропотливый способ сделать это, который, кажется, работает. Но должен быть лучший способ.

Вот код (в Scala) без окружающих заявлений:

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 
    } 

Вот вывод:

dtUTC = 2010-10-28T04: 00: 00,000 + 11: 00 локальных = 2010- 10-28T15: 00: 00.000 + 11: 00

ответ

8

Вот что я использую в текущем проекте.

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

Помогло ли это?

EDIT:

Вот то, что занимает время, в текущем TZ и преобразует в Брисбене время. Вы можете использовать тот же принцип.

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

Perfect. Я адаптировал его немного дальше на юг, в Мельбурн. – Koala3

Смежные вопросы