我需要在同一应用程序中与纽约,伦敦和东京时区打交道。有时很难管理。
这就是我将ZonedDateTime
转换为LocalDate
的方式。在functionOne
中,您不能保证参数dateTime
的时区是您期望的。在转换为LocalDate
之前,您始终需要先更改时区。
void functionOne(ZonedDateTime dateTime) {
var date = dateTime.withZoneSameInstance(londonZoneId).toLocalDate();
// use the date
}
如果他们提供函数ZonedDateTime.toLocalDate(ZoneId zoneId)
,我认为易于易于错误。人们在获得LocalDate
时被迫提供ZoneId
。
这是我能想到的另一个解决方案。我们为每个时区创建一个日期时间类型。
class LondonDateTime {
private final ZonedDateTime dateTime;
public LondonDateTime(ZonedDateTime dateTime) {
this.dateTime = dateTime.withZoneSameInstance(londonZoneId);
}
public ZonedDateTime getDateTime() { return dateTime; }
public LocalDate getLocalDate() { return dateTime.getLocalDate(); }
}
void functionTwo(LondonDateTime dateTime) {
var date1 = dateTime.getDateTime().toLocalDate();
// or
var date2 = dateTime.toLocalDate();
}