LocalDate表示日期,不包含时间和时区信息,例如"2022-04-22"。
1.使用java.util.Date
的toInstant()
方法将Date
对象转换为Instant
对象,再使用Instant
对象的atZone()
方法将其转换为ZonedDateTime
对象,最后使用ZonedDateTime
对象的toLocalDate()
方法将其转换为LocalDate
对象。
// 创建一个java.util.Date对象
Date date = new Date();
// 将java.util.Date转换为java.time.LocalDate
LocalDate localDate = date.toInstant().atZone(ZoneId.systemDefault()).toLocalDate();
2.使用java.util.Date
的toInstant()
方法将Date
对象转换为Instant
对象,再使用Instant
对象的atOffset()
方法将其转换为OffsetDateTime
对象,最后使用OffsetDateTime
对象的toLocalDate()
方法将其转换为LocalDate
对象。
// 创建一个java.util.Date对象
Date date = new Date();
// 将java.util.Date转换为java.time.LocalDate
LocalDate localDate = date.toInstant().atOffset(ZoneOffset.UTC).toLocalDate();
3.使用java.util.Calendar
类将Date对象转换为LocalDate
对象。首先需要将Date
对象转换为Calendar
对象,然后使用Calendar
对象的get()
方法获取年、月、日等信息,最后使用LocalDate.of()
方法将其转换为LocalDate
对象。
// 创建一个java.util.Date对象
Date date = new Date();
// 将java.util.Date转换为java.time.LocalDate
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
int year = calendar.get(Calendar.YEAR);
int month = calendar.get(Calendar.MONTH) + 1;
int day = calendar.get(Calendar.DAY_OF_MONTH);
LocalDate localDate = LocalDate.of(year, month, day);
4.使用SimpleDateFormat
类将Date对
象转换为LocalDate
对象。首先需要创建一个SimpleDateFormat
对象,然后使用format()
方法将Date
对象格式化为指定的日期格式,最后使用LocalDate.parse()
方法将其转换为LocalDate
对象。
// 创建一个java.util.Date对象
Date date = new Date();
// 将java.util.Date转换为java.time.LocalDate
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
String dateString = dateFormat.format(date);
LocalDate localDate = LocalDate.parse(dateString, DateTimeFormatter.ofPattern("yyyy-MM-dd"));
LocalTime表示时间,不包含日期和时区信息,例如"09:30:00"。
1.使用java.util.Date
的toInstant()
方法将Date
对象转换为Instant
对象,再使用Instant
对象的atZone()
方法将其转换为ZonedDateTime
对象,最后使用ZonedDateTime
对象的toLocalTime()
方法将其转换为LocalDate
对象。
// 创建一个java.util.Date对象
Date date = new Date();
// 将java.util.Date转换为java.time.LocalTime
LocalTime localTime = date.toInstant().atZone(ZoneId.systemDefault()).toLocalTime();
2.使用java.util.Date
的toInstant()
方法将Date
对象转换为Instant
对象,再使用Instant
对象的atOffset()
方法将其转换为OffsetDateTime
对象,最后使用OffsetDateTime
对象的toLocalTime()
方法将其转换为LocalDate
对象。
// 创建一个java.util.Date对象
Date date = new Date();
// 将java.util.Date转换为java.time.LocalTime
LocalTime localTime = date.toInstant().atOffset(ZoneOffset.UTC).toLocalTime();
3.使用SimpleDateFormat
将Date
对象转换为LocalTime
对象。
// 创建一个java.util.Date对象
Date date = new Date();
// 将java.util.Date转换为java.time.LocalTime
SimpleDateFormat sdf = new SimpleDateFormat("HH:mm:ss");
LocalTime localTime = LocalTime.parse(sdf.format(date));
4.使用Calendar
类将Date
对象转换为LocalDate
对象。
// 创建一个java.util.Date对象
Date date = new Date();
// 将java.util.Date转换为java.time.LocalTime
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
int hour = calendar.get(Calendar.HOUR_OF_DAY);
int minute = calendar.get(Calendar.MINUTE);
int second = calendar.get(Calendar.SECOND);
LocalTime localTime = LocalTime.of(hour, minute, second);
LocalDateTime表示日期和时间,不包含时区信息,例如"2022-04-22T09:30:00"。
1.使用ofInstant()
方法将Instant
对象转换为LocalDateTime
对象。
// 创建一个java.util.Date对象
Date date = new Date();
// 将java.util.Date转换为java.time.LocalDateTime
LocalDateTime localDateTime = LocalDateTime.ofInstant(date.toInstant(), ZoneId.systemDefault());
2.使用java.util.Date
的toInstant()
方法将Date
对象转换为Instant
对象,再使用Instant
对象的atOffset()
方法将其转换为OffsetDateTime
对象,最后使用OffsetDateTime
对象的toLocalDateTime()
方法将其转换为LocalDateTime
对象。
// 创建一个java.util.Date对象
Date date = new Date();
// 将java.util.Date转换为java.time.LocalTime
LocalDateTime localDateTime = date.toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime();
System.out.println(localDateTime);
2.先将Date
对象转换为ZonedDateTime
对象,再使用toLocalDateTime()
方法将其转换为LocalDateTime
对象。
// 创建一个java.util.Date对象
Date date = new Date();
// 将java.util.Date转换为java.time.LocalDateTime
LocalDateTime localDateTime = date.toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime();
3.使用SimpleDateFormat
将Date
对象转换为LocalDateTime
对象。
// 创建一个java.util.Date对象
Date date = new Date();
// 将java.util.Date转换为java.time.LocalDateTime
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
// 根据格式化字符串创建DateTimeFormatter对象
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
LocalDateTime localDateTime = LocalDateTime.parse(sdf.format(date), formatter);
4.使用Calendar
将Date
对象转换为LocalDateTime
对象。
// 创建一个java.util.Date对象
Date date = new Date();
// 将java.util.Date转换为java.time.LocalDateTime
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
LocalDateTime localDateTime = LocalDateTime.of(
calendar.get(Calendar.YEAR),
calendar.get(Calendar.MONTH) + 1,
calendar.get(Calendar.DAY_OF_MONTH),
calendar.get(Calendar.HOUR_OF_DAY),
calendar.get(Calendar.MINUTE),
calendar.get(Calendar.SECOND),
calendar.get(Calendar.MILLISECOND) * 1000000
);
ZonedDateTime表示带时区的日期和时间,例如"2022-04-22T09:30:00+08:00[GMT+08:00]"。
1.使用atZone()
方法将Instant
对象和指定时区转换为ZonedDateTime
对象。
// 创建一个java.util.Date对象
Date date = new Date();
// 将java.util.Date转换为java.time.ZonedDateTime
ZonedDateTime zonedDateTime = date.toInstant().atZone(ZoneId.systemDefault());
2.使用ofInstant()
方法将Instant
对象和指定时区转换为ZonedDateTime
对象。
// 创建一个java.util.Date对象
Date date = new Date();
// 将java.util.Date转换为java.time.ZonedDateTime
ZonedDateTime zonedDateTime = ZonedDateTime.ofInstant(date.toInstant(), ZoneId.systemDefault());
OffsetDateTime表示带有偏移量的日期和时间,例如"2022-04-22T09:30:00+08:00"。
1.调用toOffsetDateTime()
方法将ZonedDateTime
对象转换为OffsetDateTime
对象,OffsetDateTime
是ZonedDateTime
的子类,它表示一个带有偏移量的日期时间。在转换时会自动将ZonedDateTime
对象的时区信息转换为相应的偏移量信息。
// 创建一个java.util.Date对象
Date date = new Date();
// 将java.util.Date转换为java.time.OffsetDateTime
OffsetDateTime offsetDateTime = date.toInstant().atZone(ZoneId.systemDefault()).toOffsetDateTime();
上述示例代码中,使用了系统默认的时区信息
ZoneId.systemDefault()
可以指定其他时区信息,可以使用ZoneId.of(String)
方法来指定。