Angi tidssone for en dato i Java
1. Oversikt
I denne raske opplæringen vil vi se hvordan du angir tidssonen til en dato ved hjelp av Java 7, Java 8 og Joda-Time-biblioteket.
2. Bruke Java 8
Java 8 introduserte en ny API for Date-Time for å jobbe med datoer og klokkeslett som i stor grad var basert på Joda-Time-biblioteket.
De Umiddelbar klasse fra Java Date Time API modellerer et øyeblikkelig punkt på tidslinjen i UTC. Dette representerer antallet nanosekunder siden epoken for første øyeblikk av 1970 UTC.
Først vil vi få den nåværende Umiddelbar fra systemklokken og ZoneId for et tidssone navn:
Øyeblikkelig nowUtc = Instant.now (); ZoneId asiaSingapore = ZoneId.of ("Asia / Singapore");
Til slutt, ZoneId og Umiddelbar kan brukes til å lage et dato- og tidsobjekt med tidssonedetaljer. De ZonedDateTime klasse representerer en dato-tid med en tidssone i ISO-8601 kalendersystemet:
ZonedDateTime nowAsiaSingapore = ZonedDateTime.ofInstant (nowUtc, asiaSingapore);
Vi har brukt Java 8-er ZonedDateTime å representere en dato-tid med en tidssone.
3. Bruke Java 7
I Java 7 er det litt vanskelig å sette tidssonen. De Dato klasse (som representerer et bestemt øyeblikk i tid) inneholder ikke informasjon om tidssone.
La oss først få den gjeldende UTC-datoen og en Tidssone gjenstand:
Date nowUtc = new Date (); TimeZone asiaSingapore = TimeZone.getTimeZone (timeZone);
I Java 7 må vi bruke Kalender klasse for å representere en dato med en tidssone.
Endelig kan vi lage en nowUtc Kalender med asiaSingapore TimeZone og angi tiden:
Calendar nowAsiaSingapore = Calendar.getInstance (asiaSingapore); nowAsiaSingapore.setTime (nowUtc);
Det anbefales å unngå Java 7 date time API til fordel for Java 8 date time API eller Joda-Time-biblioteket.
4. Bruke Joda-Time
Hvis Java 8 ikke er et alternativ, vi kan fortsatt få samme type resultat fra Joda-Time, en de facto standard for dato-tid operasjoner i pre-Java 8 verden.
Først må vi legge til Joda-Time-avhengigheten til pom.xml:
joda-tid joda-tid 2.10
For å representere et nøyaktig punkt på tidslinjen kan vi bruke Umiddelbar fra org.joda.time pakke. Internt inneholder klassen ett stykke data, øyeblikket som millisekunder fra Java-epoken fra 1970-01-01T00: 00: 00Z:
Øyeblikkelig nowUtc = Instant.now ();
Vi bruker DateTimeZone for å representere en tidssone (for den angitte tidssone-id):
DateTimeZone asiaSingapore = DateTimeZone.forID ("Asia / Singapore");
Nå er det nåUtc tiden blir konvertert til en Dato tid objekt ved hjelp av tidssoneinformasjonen:
DateTime nowAsiaSingapore = nowUtc.toDateTime (asiaSingapore);
Slik kan Joda-time API brukes til å kombinere informasjon om dato og tidssone.
5. Konklusjon
I denne artikkelen fant vi ut hvordan du angir tidssonen i Java ved hjelp av Java 7, 8 og Joda-Time API. For å lære mer om Java 8s dato-tid-støtte, sjekk ut vår Java 8 dato-tid intro.
Som alltid er kodebiten tilgjengelig i GitHub-depotet.