Last active
August 7, 2018 02:19
-
-
Save kawasima/81fe6408fbe1558c52dfb3118616392c to your computer and use it in GitHub Desktop.
Asia/Tokyo2020
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import java.time.LocalDateTime; | |
import java.time.Month; | |
import java.time.ZoneOffset; | |
import java.time.zone.ZoneOffsetTransition; | |
import java.time.zone.ZoneOffsetTransitionRule; | |
import java.time.zone.ZoneRules; | |
import java.time.zone.ZoneRulesProvider; | |
import java.util.*; | |
public class ZoneTokyo2020Register { | |
static { | |
List<ZoneOffsetTransition> standardTransitions = new ArrayList<>(); | |
standardTransitions.add(ZoneOffsetTransition.of(LocalDateTime.of(1887, Month.DECEMBER, 31, 15, 18, 59), ZoneOffset.of("+09:18:59"), ZoneOffset.of("+09:00"))); | |
List<ZoneOffsetTransition> transitions = new ArrayList<>(); | |
transitions.add(ZoneOffsetTransition.of(LocalDateTime.of(1888, Month.JANUARY, 1, 0, 18, 59), ZoneOffset.of("+09:18:59"), ZoneOffset.of("+09:00"))); | |
transitions.add(ZoneOffsetTransition.of(LocalDateTime.of(1948, Month.MAY, 2, 0, 0), ZoneOffset.of("+09:00"), ZoneOffset.of("+10:00"))); | |
transitions.add(ZoneOffsetTransition.of(LocalDateTime.of(1948, Month.SEPTEMBER, 12, 0, 0), ZoneOffset.of("+10:00"), ZoneOffset.of("+09:00"))); | |
transitions.add(ZoneOffsetTransition.of(LocalDateTime.of(1949, Month.APRIL, 3, 0, 0), ZoneOffset.of("+09:00"), ZoneOffset.of("+10:00"))); | |
transitions.add(ZoneOffsetTransition.of(LocalDateTime.of(1949, Month.SEPTEMBER, 11, 0, 0), ZoneOffset.of("+10:00"), ZoneOffset.of("+09:00"))); | |
transitions.add(ZoneOffsetTransition.of(LocalDateTime.of(1950, Month.MAY, 7, 0, 0), ZoneOffset.of("+09:00"), ZoneOffset.of("+10:00"))); | |
transitions.add(ZoneOffsetTransition.of(LocalDateTime.of(1950, Month.SEPTEMBER, 10, 0, 0), ZoneOffset.of("+10:00"), ZoneOffset.of("+09:00"))); | |
transitions.add(ZoneOffsetTransition.of(LocalDateTime.of(1951, Month.MAY, 6, 0, 0), ZoneOffset.of("+09:00"), ZoneOffset.of("+10:00"))); | |
transitions.add(ZoneOffsetTransition.of(LocalDateTime.of(1951, Month.SEPTEMBER, 9, 0, 0), ZoneOffset.of("+10:00"), ZoneOffset.of("+09:00"))); | |
// For the Tokyo Olympic | |
transitions.add(ZoneOffsetTransition.of(LocalDateTime.of(2019, Month.JUNE, 1, 0, 0), ZoneOffset.of("+09:00"), ZoneOffset.of("+11:00"))); | |
transitions.add(ZoneOffsetTransition.of(LocalDateTime.of(2019, Month.SEPTEMBER, 1, 0, 0), ZoneOffset.of("+11:00"), ZoneOffset.of("+09:00"))); | |
transitions.add(ZoneOffsetTransition.of(LocalDateTime.of(2020, Month.JUNE, 1, 0, 0), ZoneOffset.of("+09:00"), ZoneOffset.of("+11:00"))); | |
transitions.add(ZoneOffsetTransition.of(LocalDateTime.of(2020, Month.SEPTEMBER, 1, 0, 0), ZoneOffset.of("+11:00"), ZoneOffset.of("+09:00"))); | |
List<ZoneOffsetTransitionRule> rules = new ArrayList<>(); | |
ZoneRules tokyo2020 = ZoneRules.of(ZoneOffset.of("+09:18:59"), ZoneOffset.of("+09:18:59"), | |
standardTransitions, transitions, rules); | |
ZoneRulesProvider.registerProvider(new ZoneRulesProvider() { | |
private Set<String> ids = new HashSet<>(Arrays.asList("Asia/Tokyo2020")); | |
@Override | |
protected Set<String> provideZoneIds() { | |
return ids; | |
} | |
@Override | |
protected ZoneRules provideRules(String zoneId, boolean forCaching) { | |
if (zoneId.equals("Asia/Tokyo2020")) { | |
return tokyo2020; | |
} | |
return null; | |
} | |
@Override | |
protected NavigableMap<String, ZoneRules> provideVersions(String zoneId) { | |
NavigableMap<String, ZoneRules> versions = new TreeMap<>(); | |
versions.put("2018e", tokyo2020); // I think this is a wrong version | |
return versions; | |
} | |
}); | |
} | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
public class ZoneTokyo2020Test { | |
@Before | |
public void setup() throws ClassNotFoundException { | |
Class.forName("ZoneTokyo2020Register"); | |
} | |
@Test | |
public void test() { | |
DateTimeFormatter format = DateTimeFormatter | |
.ofPattern("yyyy/MMM/d a hh:mm Z"); | |
ZoneId tokyo = ZoneId.of("Asia/Tokyo2020"); | |
System.out.println(ZonedDateTime.of(LocalDateTime.of(2018, Month.MAY, 31, 23, 59), tokyo).format(format)); | |
System.out.println(ZonedDateTime.of(LocalDateTime.of(2018, Month.JUNE, 1, 0, 0), tokyo).format(format)); | |
System.out.println(ZonedDateTime.of(LocalDateTime.of(2019, Month.MAY, 31, 23, 59), tokyo).format(format)); | |
System.out.println(ZonedDateTime.of(LocalDateTime.of(2019, Month.JUNE, 1, 0, 0), tokyo).format(format)); | |
System.out.println(ZonedDateTime.of(LocalDateTime.of(2019, Month.AUGUST, 31, 23, 59), tokyo).format(format)); | |
System.out.println(ZonedDateTime.of(LocalDateTime.of(2019, Month.SEPTEMBER, 1, 0, 0), tokyo).format(format)); | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment