Indstil tidszonen for en dato i Java

1. Oversigt

I denne hurtige vejledning ser vi, hvordan du indstiller tidszonen for en dato ved hjælp af Java 7, Java 8 og Joda-Time-biblioteket.

2. Brug af Java 8

Java 8 introducerede en ny Date-Time API til at arbejde med datoer og tidspunkter, som stort set var baseret på Joda-Time-biblioteket.

Det Øjeblikkelig klasse fra Java Date Time API modellerer et øjeblikkeligt punkt på tidslinjen i UTC. Dette repræsenterer antallet af nanosekunder siden epoken i det første øjeblik i 1970 UTC.

Først får vi den aktuelle Øjeblikkelig fra systemuret og ZoneId for et tidszonenavn:

Øjeblikkelig nowUtc = Instant.now (); ZoneId asiaSingapore = ZoneId.of ("Asien / Singapore");

Endelig blev ZoneId og Øjeblikkelig kan bruges til at oprette et dato- og tidsobjekt med tidszoneoplysninger. Det ZonedDateTime klasse repræsenterer en dato-tid med en tidszone i ISO-8601 kalendersystemet:

ZonedDateTime nowAsiaSingapore = ZonedDateTime.ofInstant (nowUtc, asiaSingapore);

Vi har brugt Java 8'er ZonedDateTime til at repræsentere en dato-tid med en tidszone.

3. Brug af Java 7

I Java 7 er det lidt vanskeligt at indstille tidszonen. Det Dato klasse (som repræsenterer et bestemt øjeblik i tiden) indeholder ingen tidszoneoplysninger.

Lad os først få den aktuelle UTC-dato og en Tidszone objekt:

Dato nowUtc = ny dato (); TimeZone asiaSingapore = TimeZone.getTimeZone (timeZone);

I Java 7 skal vi bruge Kalender klasse til at repræsentere en dato med en tidszone.

Endelig kan vi oprette en nowUtc Kalender med asienSingapore TimeZone og indstil tiden:

Kalender nowAsiaSingapore = Calendar.getInstance (asiaSingapore); nowAsiaSingapore.setTime (nowUtc);

Det anbefales at undgå Java 7 date time API til fordel for Java 8 date time API eller Joda-Time-biblioteket.

4. Brug af Joda-Time

Hvis Java 8 ikke er en mulighed, vi kan stadig få den samme slags resultat fra Joda-Time, en de facto-standard til dato-tid-operationer i præ-Java 8-verdenen.

Først skal vi tilføje Joda-Time afhængighed til pom.xml:

 joda-tid joda-tid 2.10 

For at repræsentere et nøjagtigt punkt på tidslinjen kan vi bruge Øjeblikkelig fra org.joda.time pakke. Internt holder klassen et stykke data, øjeblikket som millisekunder fra Java-epoken fra 1970-01-01T00: 00: 00Z:

Øjeblikkelig nowUtc = Instant.now ();

Vi bruger DateTimeZone for at repræsentere en tidszone (for det angivne tidszone-id):

DateTimeZone asiaSingapore = DateTimeZone.forID ("Asien / Singapore");

Nu er det nuUtc tid vil blive konverteret til en Dato tid objekt ved hjælp af tidszoneoplysningerne:

DateTime nowAsiaSingapore = nowUtc.toDateTime (asiaSingapore);

Sådan kan Joda-time API bruges til at kombinere dato og tidszoneinformation.

5. Konklusion

I denne artikel fandt vi ud af, hvordan man indstiller tidszonen i Java ved hjælp af Java 7, 8 og Joda-Time API. For at lære mere om Java 8s understøttelse af dato og klokkeslæt, se vores Java 8 dato-tid-introduktion.

Som altid er kodestykket tilgængeligt i GitHub-arkivet.