java.time.ZonedDateTime

    Java的日期与时间

  ZonedDateTime类是Java 8中日期时间功能里,用于表示带时区的日期与时间信息的类。可以用于表示一个真实事件的开始时间,如某火箭升空时间等等。
  ZonedDateTime 类的值是不可变的,所以其计算方法会返回一个新的ZonedDateTime 实例。


  1.创建一个ZonedDateTime实例
  有多种方式可以新建ZonedDateTime实例。比如使用当前时间作为值新建对象:

1 ZonedDateTime dateTime = ZonedDateTime.now(); 

另一种方式是使用指定的年月日、时分秒、纳秒以及时区ID来新建对象:

1 ZoneId zoneId = ZoneId.of("UTC+1");
2 ZonedDateTime dateTime2 = ZonedDateTime.of(2015, 11, 30, 23, 45, 59, 1234, zoneId);

 

  2.访问ZonedDateTime对象的时间
  你可以通过这些方法访问其日期时间:

1 getYear()
2 getMonth()
3 getDayOfMonth()
4 getDayOfWeek()
5 getDayOfYear()
6 getHour()
7 getMinute()
8 getSecond()
9 getNano()

  这些方法中有一些返回int有一些返回枚举类型,但可以通过枚举类型中的getValue()方法来获得int值。


  3.ZonedDateTime的计算
  ZonedDateTime类包含一系列方法,能帮你完成时间计算:

 1 plusYears()
 2 plusMonths()
 3 plusDays()
 4 plusHours()
 5 plusMinutes()
 6 plusSeconds()
 7 plusNanos()
 8 minusYears()
 9 minusMonths()
10 minusDays()
11 minusHours()
12 minusMinutes()
13 minusSeconds()
14 minusNanos()

  但注意计算时,若不巧跨越了夏令时(会补一小时或减一小时),可能得不到希望的结果。一个替代的正确做法是使用Period:

1 ZonedDateTime zoneDateTime = previousDateTime.plus(Period.ofDays(3));

 

 

  4.时区
  时区是用ZoneId类表示的,你可以使用ZoneId.now()或ZoneId.of(“xxx”)来实例化:

1 ZoneId zoneId = ZoneId.of("UTC+1");

  传给of()方法的参数是时区的ID,如“UTC+1”指距离UTC(格林威治时间)有一小时的时差,你可以使用你想要的时差来表示ZoneId(如+1与-5等等)
  你也可以使用另一种方式表示zone id,即使用地区名字,也是可以的:

1 ZoneId zoneId2 = ZoneId.of("Europe/Copenhagen");
2 ZoneId zoneId3 = ZoneId.of("Europe/Paris");

 

 

  参考:http://blog.csdn.net/tjgykhulj/article/details/69053947

posted @ 2018-01-10 16:53  靳哲  阅读(1520)  评论(0编辑  收藏  举报