Java ZonedDateTime
Java 8日期时间API中的ZonedDateTime
类表示带有时区信息的日期和时间。这可能是世界某处特定事件的开始,例如会议,火箭发射等。
ZonedDateTime类是不可变的。这意味着所有在" ZonedDateTime"对象上执行计算的方法都返回一个新的" ZonedDateTime"实例。
创建一个ZonedDateTime对象
我们可以通过几种方式创建" ZonedDateTime"对象。第一种方法是调用" ZonedDateTime"类的" now()"方法。这是一个使用now()
方法创建ZonedDateTime
对象的示例:
ZonedDateTime zonedDateTime = ZonedDateTime.now();
创建" ZonedDateTime"对象的另一种方法是使用" of()"方法,该方法可以根据具体的日期和时间创建" ZonedDateTime"对象。这是一个使用of()
方法创建ZonedDateTime
对象的示例:
ZoneId zoneId = ZoneId.of("UTC+1"); ZonedDateTime zonedDateTime2 = ZonedDateTime.of(2014, 11, 30, 23, 45, 59, 1234, zoneId);
访问ZonedDateTime的日期和时间
我们可以使用以下方法之一访问" ZonedDateTime"实例的日期和时间字段:
getYear()
getMonth()
getDayOfMonth()
getDayOfWeek()
getDayOfYear()
getHour()
getMinute()
getSecond()
getNano()
这是访问ZonedDateTime
的年份的示例:
int year = ZonedDateTime.now().getYear();
这些方法中的一些返回"枚举",而其他方法则返回" int"。在enum中,我们可以使用其getValue()方法返回其值的int表示形式。例如:
int month = ZonedDateTime.now() .getMonth().getValue();
日期和时间计算
ZonedDateTime类包含一组用于日期时间计算的方法。其中一些方法是:
plusYears()
plusMonths()
plusDays()
plusHours()
plusMinutes
plusSeconds
plusNanos()
- minusYears()
- minusMonths()
- minusDays()
- minusHours()
- minusMinutes
minusSeconds
- minusNanos()
请注意,跨越夏时制更改(开始或者结束)的计算可能无法给出我们期望的结果!一种替代方法是使用" Period"实例,如下所示:
ZonedDateTime newZoneDateTime = previousDateTime.plus(Period.ofDays(3));
这将导致更正确的计算。
时区
时区由" ZoneId"类表示,如前面的示例所示。我们可以使用ZoneId.now()
方法创建一个ZoneId
对象。这是一个例子:
ZoneId zoneId = ZoneId.of("UTC+1");
传递给of()
方法的参数是为其创建ZoneId
的时区的ID。在上面的示例中,ID为" UTC + 1",这是相对于UTC(格林威治)时间的偏移。我们可以找到所需时区的UTC偏移量,并通过将" UTC"与偏移量(例如" +1"或者" -5")组合在一起来创建与之匹配的ID。
我们还可以使用另一种类型的时区ID,该ID由时区处于活动状态的位置的名称组成。这是一个例子:
ZoneId zoneId2 = ZoneId.of("Europe/Copenhagen"); ZoneId zoneId3 = ZoneId.of("Europe/Paris");