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