Java中LocalDateTime的使用

Java中LocalDateTime使用

文章目录

  • Java中LocalDateTime使用
    • 1. 简介
    • 2. LocalDateTime用法
      • 2.1 获取当前的时间
      • 2.2 根据年月日格式化时间
      • 2.3 获取时区东八区的时间
      • 2.4 从LocalDateTime中获取年月日等时间信息
      • 2.5 从LocalDateTime中获取LocalDate与LocalTime
      • 2.6 日期计算
      • 2.7 获取某天的整点时间,通过with修改值
      • 2.8 获取毫秒值
      • 2.9 计算两个时间的时间差
    • 3. LocalDateTime与Date、String互转
      • 3.1 LocalDateTime 转 Date
      • 3.2 LocalDateTime 转 String
      • 3.3 String 转 LocalDateTime
      • 3.4 String 转 Date
      • 3.5 Date 转 LocalDateTime
      • 3.6 Date 转 String

1. 简介

LocalDateTime、LocalDate、LocalTime 是Java8全新的日期框架,较之前的util.Date以及Calander使用起来更加的方便直观,下面介绍几种常见的日期对象用法。
LocalDateTime:日期加时间的日期对象,包含年月日时分秒
LocalDate:日期类,包含年月日
LocalTime:时间类,包含时分秒
LocalDate、LocalTime、LocalDateTime、Instant均为不可变对象,修改这些对象对象会返回一个副本。而并非在原对象上修改。

2. LocalDateTime用法

2.1 获取当前的时间

LocalDateTime now = LocalDateTime.now();

2.2 根据年月日格式化时间

LocalDateTime localDateTime = LocalDateTime.of(2021, 6, 16, 16, 37, 20, 814 * 1000 * 1000);
LocalDateTime ldt = LocalDateTime.now().withYear(2021).withMonth(6).withDayOfMonth(16).withHour(10).withMinute(10).withSecond(59).withNano(999 * 1000 * 1000);

注意:最后一个参数是纳秒

2.3 获取时区东八区的时间

LocalDateTime datetime = LocalDateTime.now(ZoneId.of("Asia/Shanghai"));
LocalDateTime datetime2 = LocalDateTime.now(ZoneId.of("+8"));

2.4 从LocalDateTime中获取年月日等时间信息

LocalDateTime now = LocalDateTime.now();
int year = now.getYear();
int month = now.getMonthValue();
int dayOfYear = now.getDayOfYear();
int dayOfMonth = now.getDayOfMonth();

int hour = now.getHour();
int minute = now.getMinute();
int second = now.getSecond();
int nano = now.getNano();

System.out.println(year + " " + month + " " + dayOfYear + " " + dayOfMonth);
System.out.println(hour + " " + minute + " " + second + " " + nano);

2.5 从LocalDateTime中获取LocalDate与LocalTime

LocalDate localDate = now.toLocalDate();
LocalTime localTime = now.toLocalTime();

2.6 日期计算

LocalDateTime now = LocalDateTime.now();
LocalDateTime tomorrow = now.plusDays(1L);
tomorrow = tomorrow.plusHours(2L);
tomorrow = tomorrow.plusMinutes(10L);

LocalDateTime yesterday = now.minus(Duration.ofDays(1));
yesterday = yesterday.plusHours(2L);
yesterday = yesterday.plusMinutes(10L);

System.out.println(tomorrow);
System.out.println(yesterday);

注意:LocalDateTime、LocalDate、LocalTime 日期对象每次修改都会创建一个新的对象,而非在原有对象基础上修改

2.7 获取某天的整点时间,通过with修改值

LocalDateTime now = LocalDateTime.now();
LocalDateTime ldt1 = now.withHour(10).withMinute(0).withSecond(0).withNano(0);

2.8 获取毫秒值

Instant instant = Instant.now();
long min = instant.toEpochMilli();
System.out.println(min);

2.9 计算两个时间的时间差

下面这种方式可以获取两个时间点相差N年N月N日N时N分N秒

LocalDateTime fromDateTime = LocalDateTime.of(1992, 6, 11, 10, 23, 55);
LocalDateTime toDateTime = LocalDateTime.now();
LocalDateTime tempDateTime = LocalDateTime.from(fromDateTime);

long years = tempDateTime.until(toDateTime, ChronoUnit.YEARS);
tempDateTime = tempDateTime.plusYears(years);

long months = tempDateTime.until(toDateTime, ChronoUnit.MONTHS);
tempDateTime = tempDateTime.plusMonths(months);

long days = tempDateTime.until(toDateTime, ChronoUnit.DAYS);
tempDateTime = tempDateTime.plusDays(days);

long hours = tempDateTime.until(toDateTime, ChronoUnit.HOURS);
tempDateTime = tempDateTime.plusHours(hours);

long minutes = tempDateTime.until(toDateTime, ChronoUnit.MINUTES);
tempDateTime = tempDateTime.plusMinutes(minutes);

long seconds = tempDateTime.until(toDateTime, ChronoUnit.SECONDS);

System.out.println("" + java.time.Duration.between(tempDateTime, toDateTime).toHours());
System.out.println(years + " years "
        + months + " months "
        + days + " days "
        + hours + " hours "
        + minutes + " minutes "
        + seconds + " seconds.");

如果只想获取两个时间相差的天数或者小时数,可以使用以下方法

LocalDateTime ldt1 = LocalDateTime.of(1992, 6, 11, 10, 23, 55);
LocalDateTime ldt2 = LocalDateTime.now();
System.out.println(Duration.between(ldt1, ldt2).toDays());
System.out.println(Duration.between(ldt1, ldt2).toHours());

3. LocalDateTime与Date、String互转

3.1 LocalDateTime 转 Date

public static Date localDateTime2Date(LocalDateTime localDateTime) {
    return Date.from(localDateTime.atZone(ZoneId.systemDefault()).toInstant());
}

3.2 LocalDateTime 转 String

private static final DateTimeFormatter DATE_TIME_FORMATTER = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
public static String localDateTime2String(LocalDateTime localDateTime) {
    return localDateTime.format(DATE_TIME_FORMATTER);
}

注意:DateTimeFormatter是线程安全的类,可以将此类放到常量中。

3.3 String 转 LocalDateTime

private static final DateTimeFormatter DATE_TIME_FORMATTER = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
public static LocalDateTime string2LocalDateTime(String str) {
    return LocalDateTime.parse(str, DATE_TIME_FORMATTER);
}

3.4 String 转 Date

public static Date string2Date(String str) throws ParseException {
    SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    return simpleDateFormat.parse(str);
}

注意:SimpleDateFormat是非线程安全的类,在多线程操作时会报错,所以此对象每次用的时候最好新建。或者作为方法入参传递进来。

3.5 Date 转 LocalDateTime

public static LocalDateTime date2LocalDateTime(Date date) {
    return date.toInstant()
            .atZone(ZoneId.systemDefault())
            .toLocalDateTime();
}

3.6 Date 转 String

public static String date2String(Date date) {
    SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    return formatter.format(date);
}

你可能感兴趣的:(Java,java)