0
点赞
收藏
分享

微信扫一扫

Java8中如何操作时间

勇敢乌龟 2021-12-29 阅读 35

日期

日期,即为yyyy-MM-dd的格式打印的,不含有时间。

当前日期

// 当前日期 yyyy-MM-dd
System.out.println("当前日期: "+LocalDate.now());

获取一年的第几天

// 一年中的第几天
LocalDate localDate = LocalDate.ofYearDay(2020, 365);
System.out.println("2020年的第365天: "+localDate);

日期工厂

//日期工厂,构造2020-7-30
LocalDate date = LocalDate.of(2020, 7, 30);
System.out.println("日期工厂: "+date);

分割

LocalDate now = LocalDate.now();
int year = now.getYear();
Month month = now.getMonth();
int dayOfYear = now.getDayOfYear();
int dayOfMonth = now.getDayOfMonth();
DayOfWeek dayOfWeek = now.getDayOfWeek();
System.out.printf("当前年份:%d,当前月份:%s,今天是今年的第%d天,今天是这个月的第%d天,今天是%s",year,month,dayOfYear,dayOfMonth,dayOfWeek);

// 还提供了一个通用的get方法,通过传入枚举成员获取你所需要的信息
System.out.println(today.get(ChronoField.DAY_OF_MONTH));
System.out.println(today.get(ChronoField.DAY_OF_YEAR));
System.out.println(today.get(ChronoField.DAY_OF_WEEK));

判断日期是否相等

LocalDate today = LocalDate.now();
LocalDate yesterday = LocalDate.of(2020, 7, 29);
System.out.println("判断日期相等:"+Objects.equals(today,yesterday));

时间

获取一天的开始时间和结束时间

// 开始时间
LocalDateTime startOfDay = today.atStartOfDay();
// 结束时间
LocalDateTime endOfDay = today.atTime(LocalTime.MAX);
// DATE_FORMATTER= "yyyy-MM-dd HH:mm:ss"
System.out.println("今天的开始时间:"+startOfDay.format(DateTimeFormatter.ofPattern(DATE_FORMATTER)));
System.out.println("今天的结束时间:"+endOfDay.format(DateTimeFormatter.ofPattern(DATE_FORMATTER)));

获取一个月的开始时间和结束时间

LocalDate firstDate = today.with(TemporalAdjusters.firstDayOfMonth());
LocalDate endDate = today.with(TemporalAdjusters.lastDayOfMonth());
System.out.println("这个月的开始日期:"+firstDate+"\n这个月的结束日期:"+endDate);

获取一个月有多少天

int length = endDate.lengthOfMonth();
System.out.println("当前天数:"+length);

日期计算:Duration、Period

LocalDate plus = firstDate.plus(1, ChronoUnit.WEEKS);
System.out.println("一周后:"+plus);
LocalDate plusMonths = firstDate.plus(1, ChronoUnit.MONTHS);
System.out.println("一个月后:"+ plusMonths);
LocalDate plusDays = firstDate.plus(5, ChronoUnit.DAYS);
System.out.println("5天后:"+plusDays);
LocalDate lastWeek = firstDate.plus(-1, ChronoUnit.WEEKS);
System.out.println("一周前:"+lastWeek);

Duration duration = Duration.between(firstDate.atTime(LocalTime.MIN), plusDays.atTime(LocalTime.MIN));
System.out.println("日期差:"+duration.getSeconds()/3600/24);

Period period = Period.between(firstDate, plusDays);
System.out.println("日期差:"+period.getDays());

枚举

long subResult = ChronoUnit.DAYS.between(firstDate, plusDays);
System.out.println("ChronoUnit日期差:"+subResult);

时间戳

// 获取时间戳,与北京时间相差8个小时
Instant instant = Instant.now();
System.out.println(instant);
Instant beiJingInstant = Instant.now().plusMillis(TimeUnit.HOURS.toMillis(8));
System.out.println(beiJingInstant);
// 计算差值
Duration between = Duration.between(instant, beiJingInstant);
System.out.println(between.toHours());

LocalDate、LocalDateTime与Date的转化

    /**
     * 把localDate转化成Date
     * @param localDate
     * @return
     */
    public static Date getDateFromLocalDate(LocalDate localDate){
        return Date.from(localDate.atStartOfDay(ZoneOffset.ofHours(8)).toInstant());
    }

    /**
     * 把localDateTime转化成Date
     * @param localDateTime
     * @return
     */
    public static Date getDateFromLocalDateTime(LocalDateTime localDateTime){
        return Date.from(localDateTime.atZone(ZoneOffset.ofHours(8)).toInstant());
    }
Date dateFromLocalDate = LocalDateUtils.getDateFromLocalDate(endDate);
System.out.println(dateFromLocalDate);

Date dateFromLocalDateTime = LocalDateUtils.getDateFromLocalDateTime(firstTime);
System.out.println(dateFromLocalDateTime);

LocalDate、LocalDateTime与时间戳的转化

        long date = System.currentTimeMillis();
        System.out.println(date);
        LocalDate localDate = Instant.ofEpochMilli(date).atZone(ZoneId.systemDefault()).toLocalDate();
        LocalDateTime localDateTime = Instant.ofEpochMilli(date).atZone(ZoneId.systemDefault()).toLocalDateTime();
        System.out.println(localDate);
        System.out.println(localDateTime);
        LocalDateTime now = LocalDateTime.now();
        long nowInstant = now.atZone(ZoneId.systemDefault()).toInstant().toEpochMilli());
举报

相关推荐

0 条评论