Время в Джоде: Конвертировать UTC в местное - PullRequest
6 голосов
/ 28 октября 2010

Я хочу преобразовать объект DateTime UTC Joda Time в местное время.

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

Вот код (в 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

1 Ответ

8 голосов
/ 28 октября 2010

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

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
...