更多: zhilu jiaocheng
Java 将 ZonedDateTime 转换为 LocalDate
要将 ZonedDateTime 转换为 LocalDate 实例,请使用 toLocalDate() 方法。
它返回一个与给定日期时间相同的年、月和日的LocalDate。
import java.time.LocalDate;
import java.time.ZonedDateTime;
public class Main {
public static void main(String[] args) {
ZonedDateTime zonedDateTime = ZonedDateTime.now();
LocalDate localDate = zonedDateTime.toLocalDate();
System.out.println(localDate);
}
}
输出:
2019-04-02
LocalDate 表示没有时间和时区的日历日期。
ZonedDateTime 实例包含这两种信息。
ZonedDateTime = LocalDate + 时间 + 时区
将 LocalDate 转换为 ZonedDateTime
要将 LocalDate实例转换为 ZonedDateTime实例,我们有两种方法。
LocalDate 直接转换为 ZonedDateTime
如果我们只想将当前时区的本地日期转换为不同时区的本地日期。
例如:
只想添加区域信息,那么我们可以使用LocalDate.atStartOfDay(zoneId)方法。
LocalDate localDate = LocalDate.now();
ZonedDateTime zonedDateTime = localDate.atStartOfDay(ZoneId.of("EST5EDT"));
System.out.println(zonedDateTime);
输出:
2019-04-02T00:00-04:00[EST5EDT]
LocalDate 先转换为 LocalDateTime 再转换为 ZonedDateTime
如果我们想将时间和时区信息添加到本地日期,那么我们需要将这两个部分一一添加以获取ZonedDateTime实例。
ZonedDateTime atStartOfDay()ZonedDateTime atTime(LocalTime time)ZonedDateTime atTime(int 小时,int 分钟)ZonedDateTime atTime(int 小时,int 分钟,int 秒)ZonedDateTime atTime(int 小时,int 分钟,int 秒,int nanoOfSecond)
上述方法将有助于向 LocalDate添加时间部分。
然后我们可以使用 LocalDateTime.atZone(ZoneId) 方法添加区域信息。
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.ZoneId;
import java.time.ZonedDateTime;
public class Main {
public static void main(String[] args) {
LocalDate localDate = LocalDate.now(); //local date
LocalDateTime localDateTime = localDate.atTime(10, 45, 56); //Add time information
ZoneId zoneId = ZoneId.of("Asia/Kolkata"); // Zone information
ZonedDateTime zdtAtAsia = localDateTime.atZone(zoneId); // add zone information
ZonedDateTime zdtAtET = zdtAtAsia
.withZoneSameInstant(ZoneId.of("America/New_York")); // Same time in ET timezone
System.out.println(zdtAtAsia);
System.out.println(zdtAtET);
}
}
输出:
2019-04-02T10:45:56+05:30[Asia/Kolkata] 2019-04-02T01:15:56-04:00[America/New_York]
日期:2020-09-17 00:09:42 来源:oir作者:oir
