Date类转Java8新时间类看这一篇就够了,Date转LocalDate,LocalTime,LocalDateTime,ZonedDateTime,OffsetDateTime方法大全!

Date转Java8新时间类

1.Date转LocalDate:

LocalDate表示日期,不包含时间和时区信息,例如"2022-04-22"。

1.使用java.util.DatetoInstant()方法将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.DatetoInstant()方法将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"));

2.Date转LocalTime:

LocalTime表示时间,不包含日期和时区信息,例如"09:30:00"。

1.使用java.util.DatetoInstant()方法将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.DatetoInstant()方法将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.使用SimpleDateFormatDate对象转换为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);

3.Date转LocalDateTime:

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.DatetoInstant()方法将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.使用SimpleDateFormatDate对象转换为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.使用CalendarDate对象转换为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
);

4.Date转ZonedDateTime:

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());

5.Date转OffsetDateTime:

OffsetDateTime表示带有偏移量的日期和时间,例如"2022-04-22T09:30:00+08:00"。

1.调用toOffsetDateTime()方法将ZonedDateTime对象转换为OffsetDateTime对象,OffsetDateTimeZonedDateTime的子类,它表示一个带有偏移量的日期时间。在转换时会自动将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)方法来指定。

你可能感兴趣的:(Java开发中的常见问题,java,jvm,servlet,spring,boot,java-ee)