一.工具类实现:
计算某天距今天过了多少天(比如: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);
}
}