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.