计算过去某天距离今天过去了多少天。

一.工具类实现:

计算某天距今天过了多少天(比如:2020-11-25距2018-10-8过了779天)
jdk8自带工具类:ChronoUtil

           LocalDate startDay = LocalDate.of(2018, 10, 8);
            LocalDate endDay = LocalDate.of(2021, 8, 10);
            long diffDay = ChronoUnit.DAYS.between(startDay, endDay);
            System.out.println(diffDay);//1037

二.其它

计算某天距今天过了多少天(比如:2020-11-25距2018-10-8过了779天)
1-键盘录入某一天,将录入的String转换为Date日期类
2-日期类Date,转换为ms值(距离1979-1-1日过了多少ms)
3-同理,输入另外某一天(如果是此时此刻当天,就使用系统时间,不需要手动输入),也转换为ms值
只有毫秒值才能计算差,日期不可以计算
days =diffMs / 1000 /60 /60 / 24

public class Main
{
    public static void main(String[] args) throws ParseException
    {
        //求今天的日期(比如2020-11-25)
        Date date = new Date();
        //输入要求的那天日期
        Scanner sc = new Scanner(System.in);
        System.out.println("输入日期,即今天距离的那天格式为yyyy-MM-dd");
        String oneday = sc.nextLine();
        //调用DateFormat类
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
        //将字符串转化为日期
        Date date1 = sdf.parse(oneday);
        //调用Date类的方法,求出该日期,距离1971-1-1过了多少ms
        long timee = date.getTime();
        long time1 = date1.getTime();
        //将ms差,转换为天
        long diffdays = (timee - time1) / 60 / 60 / 24 / 1000;
        System.out.println(diffdays);
    }
}

三、日期转换工具类

import lombok.experimental.UtilityClass;
import java.time.Instant;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.LocalTime;
import java.time.ZoneId;
import java.time.ZonedDateTime;
import java.time.format.DateTimeFormatter;
import java.util.Date;

@UtilityClass
public class DateUtils {
    public static final String YYYY_MM_dd_HMS = "yyyy-MM-dd HH:mm:ss";
    public static final ZoneId zoneId = ZoneId.systemDefault();

    /**
     * date格式转为LocalDateTime
     *
     * @param date 日期
     * @return     LocalDateTime时间
     */
    public LocalDateTime date2Ldt(Date date) {
        return LocalDateTime.ofInstant(date.toInstant(), zoneId);
    }

    /**
     * LocalDateTime格式转为date
     *
     * @param ldt 日期
     * @return    date格式日期
     */
    public Date ldt2Date(LocalDateTime ldt) {
        ZonedDateTime zonedDateTime = ldt.atZone(zoneId);
        return Date.from(zonedDateTime.toInstant());
    }

    /**
     * date格式转为LocalDate
     *
     * @param date 日期
     * @return     LocalDate日期
     */
    public LocalDate date2ld(Date date) {
        Instant instant = date.toInstant();
        return instant.atZone(zoneId).toLocalDate();
    }

    /**
     * LocalDate格式转为date
     *
     * @param ld 日期
     * @return   date日期
     */
    public Date ld2Date(LocalDate ld) {
        return Date.from(ld.atStartOfDay(zoneId).toInstant());
    }

    /**
     * LocalDateTime格式转为Long时间戳
     *
     * @param ldt 日期
     * @return    Long时间戳
     */
    public Long ldt2Long(LocalDateTime ldt) {
        return ldt.atZone(zoneId).toInstant().toEpochMilli();
    }

    /**
     * Long时间戳转为LocalDateTime格式
     *
     * @param timeStamp 时间戳
     * @return          LocalDateTime日期
     */
    public LocalDateTime long2Ldt(Long timeStamp) {
        return Instant.ofEpochMilli(timeStamp).atZone(zoneId).toLocalDateTime();
    }

    /**
     * Long时间戳转为LocalDateTime格式(yyyy-MM-dd 00:00:00)
     *
     * @param timeStamp 时间戳
     * @return          LocalDateTime起始日期
     */
    public LocalDateTime long2LdtStart(Long timeStamp) {
        Date date = new Date(timeStamp);
        LocalDateTime ldt = LocalDateTime.ofInstant(Instant.ofEpochMilli(date.getTime()), zoneId);
        return ldt.with(LocalTime.MIN);
    }

    /**
     * yyyy-MM-dd字符串日期转为LocalDateTime格式(yyyy-MM-dd 00:00:00)
     *
     * @param time yyyy-MM-dd字符串日期
     * @return          LocalDateTime起始日期
     */
    public LocalDateTime yyyy_MM_dd2LdtStart(String time) {
        LocalDate localDate = LocalDate.parse(time, DateTimeFormatter.ISO_LOCAL_DATE);
        return localDate.atStartOfDay();
    }

    /**
     * Long时间戳转为LocalDateTime格式(yyyy-MM-ddT23:59:59)
     *
     * @param timeStamp 时间戳
     * @return          LocalDateTime起始日期
     */
    public LocalDateTime long2LdtEnd(Long timeStamp) {
        LocalDate localDate = Instant.ofEpochSecond(timeStamp).atZone(zoneId).toLocalDate();
        return localDate.atTime(23, 59, 59);
    }

    /**
     * Long时间戳转为LocalDate格式
     *
     * @param timeStamp 时间戳
     * @return          LocalDate日期
     */
    public LocalDate long2Ld(Long timeStamp) {
        return Instant.ofEpochMilli(timeStamp).atZone(zoneId).toLocalDate();
    }

    /**
     * LocalDate格式转为LocalDateTime
     *
     * @param ld 日期
     * @return   LocalDateTime日期
     */
    public LocalDateTime ld2Ldt(LocalDate ld) {
        return ld.atStartOfDay();
    }

    /**
     * LocalDateTime格式转为LocalDate
     *
     * @param ldt 日期
     * @return   LocalDate日期
     */
    public LocalDate ldt2Ld(LocalDateTime ldt) {
        return ldt.toLocalDate();
    }

    /**
     * 将LocalDateTime转为yyyy-MM-dd格式字符日期
     *
     * @param ldt 时间
     * @return    字符串日期
     */
    public String ldt2YYYY_MM_dd(LocalDateTime ldt) {
        return ldt.format(DateTimeFormatter.ISO_LOCAL_DATE);
    }

    /**
     * 将LocalDateTime转为yyyyMMdd格式字符日期
     *
     * @param ldt 时间
     * @return    字符串日期
     */
    public String ldt2yyyyMMdd(LocalDateTime ldt) {
        return ldt.format(DateTimeFormatter.BASIC_ISO_DATE);
    }

    /**
     * 将LocalDateTime转为yyyy-MM-dd HH:mm:ss格式字符日期
     *
     * @param ldt 时间
     * @return    字符串日期
     */
    public String ldt2YYYY_MM_dd_HMS(LocalDateTime ldt) {
        return ldt.format(DateTimeFormatter.ofPattern(YYYY_MM_dd_HMS));
    }

    /**
     * yyyy-MM-dd格式字符串日期转为LocalDateTime格式
     *
     * @param time 日期
     * @return     LocalDate日期
     */
    public LocalDate yyyy_MM_dd2Ld(String time) {
        return LocalDate.parse(time, DateTimeFormatter.ISO_LOCAL_DATE);
    }

    /**
     * yyyyMMdd格式字符串转为yyyy-MM-dd格式字符串
     *
     * @param basicIsoDate yyyyMMdd格式日期
     * @return             yyyy-MM-dd格式日期
     */
    public String basicIsoDate2IsoLocalDate(String basicIsoDate) {
        LocalDate parse = LocalDate.parse(basicIsoDate, DateTimeFormatter.BASIC_ISO_DATE);
        return parse.format(DateTimeFormatter.ISO_LOCAL_DATE);
    }
}
  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值