时区的处理

  • Java8 中加入了对时区的支持,带时区的时间为分别为:ZonedDate、ZonedTime、ZonedDateTime。其中每个时区都对应着 ID,地区ID都为 “{区域}/{城市}”的格式。
  • 例如 :Asia/Shanghai 等
  • ZoneId:该类中包含了所有的时区信息
  • getAvailableZoneIds() : 可以获取所有时区时区信息
  • of(id) : 用指定的时区信息获取 ZoneId 对象

测试代码

  1. public class ZoneTest {
  2. // 1.查看所有的可用时区
  3. @Test
  4. public void test1() {
  5. // 调用ZoneId类的getAvailableZoneIds
  6. Set<String> set = ZoneId.getAvailableZoneIds();
  7. set.forEach(System.out::println);
  8. }
  9. /*
  10. * 结果:
  11. * ……
  12. * Pacific/Guadalcanal
  13. * Europe/Athens
  14. * US/Pacific
  15. * Europe/Monaco
  16. */
  17. // 2.通过时区构建LocalDateTime
  18. @Test
  19. public void test2() {
  20. LocalDateTime ldt1 = LocalDateTime.now(ZoneId.of("UTC"));
  21. System.out.println(DateTimeUtil.getLocalTimeString(ldt1,null));
  22. ZonedDateTime atZone = ldt1.atZone(ZoneId.of("UTC"));
  23. System.out.println(atZone);
  24. // 输出
  25. //2020-03-21 09:41:59
  26. //2020-03-21T09:41:59.476Z[UTC]
  27. }
  28. /*
  29. * 结果:
  30. * 2018-01-21T23:15:27.902
  31. */
  32. // 3.以时区格式显示时间
  33. @Test
  34. public void test3() {
  35. LocalDateTime ldt1 = LocalDateTime.now(ZoneId.of("Asia/Shanghai"));
  36. ZonedDateTime atZone = ldt1.atZone(ZoneId.of("Asia/Shanghai"));
  37. System.out.println(atZone);
  38. }
  39. /*
  40. * 结果:
  41. * 2018-01-22T12:15:20.131+08:00[Asia/Shanghai]
  42. */
  43. }