2014-12-07 5 views
7

Naprawdę nie rozumiem Temporal Adjusters lub nowej biblioteki czasu Java nawet po przeczytaniu licznych tutoriali.Jak przekonwertować wyszukiwanie dynamiczne na czas lokalny?

Jak można przekonwertować obiekt Instant na obiekt LocalTime. Myślałem o czymś w rodzaju:

LocalTime time = LocalTime.of(
     instantStart.get(ChronoField.HOUR_OF_DAY), 
     instantStart.get(ChronoField.MINUTE_OF_HOUR) 
    ); 

Ale to nie działa. Jak to zrobić?

Odpowiedz

11

Sposób, w jaki to rozumiem ... Natychmiastowy to czas w stylu UTC, nieobciążony strefą zawsze UTC. LocaleTime jest czasem w danej strefie. Więc można się spodziewać będzie działać dodaje zważywszy, że od razu realizuje TemporalAccessor,

Instant instant = Instant.now(); 
LocalTime local = LocalTime.from(instant); 

ale dostajesz „Nie można uzyskać Localtime z TemporalAccessor” błąd. Zamiast tego musisz podać, gdzie jest "lokalny". Nie ma domyślnego - prawdopodobnie dobrze.

Instant instant = Instant.now(); 
LocalTime local = LocalTime.from(instant.atZone(ZoneId.of("GMT+3"))); 
System.out.println(String.format("%s => %s", instant, local)); 

Wyjście

2014-12-07T07:52:43.900Z => 10:52:43.900 

instantStart.get (ChronoField.HOUR_OF_DAY) generuje błąd, ponieważ nie koncepcyjnie obsługiwać go można tylko poprzez dostęp HOUR_OF_DAY itp instancji Localtime.

+0

Ah. No cóż, nieporozumienia bardzo dużo o samych zajęciach. Próbuję zapisać czas rozpoczęcia i zakończenia wydarzenia w kalendarzu jako dwie instancje. następnie wykonaj z tych wystąpień czas trwania. Co powinienem zamiast tego zrobić? W jaki sposób powinienem przechować te informacje przy użyciu klas czasu Java 8? A także nie jestem pewien, czy rozumiem czasowe Accessory z wyjaśnień podanych w tutorialach Oracle. Gdzie mogę się uczyć, żeby lepiej to uczyć? – Connorelsea

+2

@Connorelsea Nie jestem ekspertem, uważam, że nowy interfejs java.time API jest również niesamowicie mylący. Pomyślałbym, że przechowywanie momentów będzie lepsze i korzystam tylko z LocalTime, kiedy faktycznie trzeba wyświetlać dane użytkownikowi (w danej strefie czasowej). – Adam

+0

W rzeczywistości LocalTime nie zawiera strefy czasowej. Jego javadoc stwierdza: "Ta klasa nie przechowuje ani nie reprezentuje daty ani strefy czasowej, a zamiast tego jest to opis czasu lokalnego widziany na zegarze ściennym". Afaik, Instant nie ma pojęcia, jak godzina dnia, ale tylko sekundy od epoki. Dlatego najpierw musisz stworzyć ZonedDateTime od tej chwili. – Alex