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.


$config[zx-auto] not found$config[zx-overlay] not found