2013-03-29 6 views
6

Zajmuję się biblioteką Joda Time. Próbuję dowiedzieć się, jak skonstruować obiekt DateTime, biorąc pod uwagę znacznik czasu epoki i strefę czasową. Mam nadzieję, że pozwoli mi to znaleźć dzień tygodnia, dnia, itd. Dla tego czasu epoki, w tej strefie czasowej. Jednak nie jestem pewien, jak przekazać DateTimeZone do konstruktora DateTime.Jak utworzyć instancję Joda DateTime z TimeZone String ID i Epoch

import org.joda.time.DateTime; 
import org.joda.time.DateTimeZone; 
import org.joda.time.Instant; 

public class TimeZoneTest { 

    public static void main (String[] args) { 

     long epoch = System.currentTimeMillis()/1000; 

     DateTimeZone tz = new DateTimeZone("America/New_York"); 

     DateTime dt = new DateTime(epoch, tz); 

     System.out.println(dt); 
    } 

} 

Próbowałem powyższego zakodowanego przykład "America/New_York", ale dostałem to z kompilatora. Co ja robię źle?

$ javac -cp "joda-time-2.2.jar:." TimeZoneTest.java 
    TimeZoneTest.java:12: org.joda.time.DateTimeZone is abstract; cannot be instantiated 
    DateTimeZone tz = new DateTimeZone("America/New_York"); 
        ^
    1 error 

Odpowiedz

10

Aby uzyskać strefę czasową z ID, należy użyć DateTimeZone.forID:

DateTimeZone zone = DateTimeZone.forID("America/New_York"); 

Tak na marginesie, nie sądzę „epoka” to dobra nazwa dla zmiennej - to naprawdę " sekund od epoki Uniksa ". Ponadto nie widzę powodu, dla którego dzielisz przez 1000 ... the relevant constructor for DateTime bierze strefę czasową i milisekund od epoki Uniksa ... więc możesz przekazać wartość zwróconą bezpośrednio z System.currentTimeMillis().

+0

Świetne, dziękuję za odpowiedź, działa idealnie i wskazuje mi w dobrym kierunku (tj. Czytanie dokumentów bardziej dokładnie :). –

Powiązane problemy