JAVA日期

本文详细介绍了Java中LocalDate和LocalTime的使用方法,包括日期转换、日期间隔计算、获取特定日期如季度第一天等,以及如何判断日期是否为月初、月末、年初、年末等特殊位置。同时,提供了丰富的示例代码,帮助读者快速掌握日期处理技巧。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

LocalDate和LocalTime

一、LocalDate和LocalTime的用法介绍

二、一些时间方法的基本实现

public class DateUtil {

	//变成LocalDate类型
    public static LocalDate tranStrToLocalDate(String date,String formatter){
        return LocalDate.parse(date, DateTimeFormatter.ofPattern(formatter));
    }

    public static String tranLocalDateToStr(LocalDate date,String formatter){
        DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern(formatter);
        return date.format(dateTimeFormatter);
    }

    //获取两个日期差
    public static int getBetweenDays(LocalDate startDate,LocalDate endDate){
        return (int)startDate.until(endDate, ChronoUnit.DAYS);
    }

    //获取当天
    public static LocalDate getToday(){
        return LocalDate.now();
    }
    //获取日期的当月第一天
    public static LocalDate getFirstDayOfMonth(LocalDate date){
        return date.with(TemporalAdjusters.firstDayOfMonth());
    }
    //获取日期的当月最后一天
    public static LocalDate getLastDayOfMonth(LocalDate date){
        return date.with(TemporalAdjusters.lastDayOfMonth());
    }
    //获取日期的下个月第一天
    public static LocalDate getFirstDayOfNextMonth(LocalDate date){
        return date.with(TemporalAdjusters.firstDayOfNextMonth());
    }
    //获取日期的上个月最后一天
    public static LocalDate getLastDayOfLastMonth(LocalDate date){
        return date.with(TemporalAdjusters.firstDayOfMonth()).plusDays(-1);
    }
    //获取日期所在季度的第一天
    public static LocalDate getFirstDayOfQuarter(LocalDate date) {
        int month = date.getMonth().getValue();
        switch(month){
            case 1:case 4:case 7: case 10:
                return getFirstDayOfMonth(date);
            case 2: case 5:case 8:case 11:
                return getFirstDayOfMonth(date.plusMonths(-1));
            case 3:case 6:case 9:case 12:
                return getFirstDayOfMonth(date.plusMonths(-2));
            default:
                return date;
        }
    }
    //获取季度的最后一天
    public static LocalDate getLastDayOfQuarter(LocalDate date) {
        int month = date.getMonth().getValue();
        switch(month){
            case 1:case 4:case 7: case 10:
                return getLastDayOfMonth(date.plusMonths(+1));
            case 2: case 5:case 8:case 11:
                return getLastDayOfMonth(date.plusMonths(+2));
            case 3:case 6:case 9:case 12:
                return getLastDayOfMonth(date);
            default:
                return date;
        }
    }
    //获取日期的当年第一天
    public static LocalDate getFirstDayOfYear(LocalDate date){
        return date.with(TemporalAdjusters.firstDayOfYear());
    }
    //获取日期的当年最后一天
    public static LocalDate getLastDayOfYear(LocalDate date){
        return date.with(TemporalAdjusters.lastDayOfYear());
    }

    //LocalDate转Date
    public static LocalDate transToLocalDate(Date date){
        Instant instant = date.toInstant();
        ZoneId zoneId = ZoneId.systemDefault();
        return instant.atZone(zoneId).toLocalDate();
    }
    //Date转LocalDate
    public static Date transToDate(LocalDate date){
        ZoneId zone = ZoneId.systemDefault();
        Instant instant = date.atStartOfDay().atZone(zone).toInstant();
        return Date.from(instant);
    }
    //两个日期间隔的月
    public static int getMonth(LocalDate dateStart,LocalDate dateEnd){
        Date start = transToDate(dateStart);
        Date end = transToDate(dateEnd);
        if (start.after(end)) {
            Date t = start;
            start = end;
            end = t;
        }
        Calendar startCalendar = Calendar.getInstance();
        startCalendar.setTime(start);
        Calendar endCalendar = Calendar.getInstance();
        endCalendar.setTime(end);
        Calendar temp = Calendar.getInstance();
        temp.setTime(end);
        temp.add(Calendar.DATE, 1);
        int year = endCalendar.get(Calendar.YEAR) - startCalendar.get(Calendar.YEAR);
        int month = endCalendar.get(Calendar.MONTH) - startCalendar.get(Calendar.MONTH);
        if ((startCalendar.get(Calendar.DATE) == 1)&& (temp.get(Calendar.DATE) == 1)) {
            return year * 12 + month + 1;
        } else if ((startCalendar.get(Calendar.DATE) != 1) && (temp.get(Calendar.DATE) == 1)) {
            return year * 12 + month;
        } else if ((startCalendar.get(Calendar.DATE) == 1) && (temp.get(Calendar.DATE) != 1)) {
            return year * 12 + month;
        } else {
            return (year * 12 + month - 1) < 0 ? 0 : (year * 12 + month);
        }
    }
    //两个日期间隔的年
    public static int getYear(LocalDate dateStart,LocalDate dateEnd){
        Date start = transToDate(dateStart);
        Date end = transToDate(dateEnd);
        if (start.after(end)) {
            Date t = start;
            start = end;
            end = t;
        }
        Calendar startCalendar = Calendar.getInstance();
        startCalendar.setTime(start);
        Calendar endCalendar = Calendar.getInstance();
        endCalendar.setTime(end);
        Calendar temp = Calendar.getInstance();
        temp.setTime(end);
        temp.add(Calendar.DATE, 1);
        return endCalendar.get(Calendar.YEAR) - startCalendar.get(Calendar.YEAR);
    }
    //获取当前月份所在季度
    public static int getQuarter(LocalDate date){
        int month = date.getMonth().getValue();
        switch(month){
            case 1: case 2: case 3:
                return 1;
            case 4: case 5: case 6:
                return 2;
            case 7: case 8: case 9:
                return 3;
            case 10: case 11: case 12:
                return 4;
            default: return 0;
        }
    }
    //是否是月的第一天
    public static boolean ifFirstDayOfMonth(LocalDate date){
        return date.getDayOfMonth()==1;
    }
    //是否是月的最后一天
    public static boolean ifLastDayOfMonth(LocalDate date){
        return date.getDayOfMonth()==getLastDayOfMonth(date).getDayOfMonth();
    }
    //是否是年的第一天
    public static boolean ifFirstDayOfYear(LocalDate date){
        return date.getDayOfYear()==1;
    }
    //是否是年的最后一天
    public static boolean ifLastDayOfYear(LocalDate date){
        return date.getDayOfYear()==getLastDayOfYear(date).getDayOfMonth();
    }
    //是否是季度的最后一天
    public static boolean ifLastDayOfQuarter(LocalDate date) {
        int month = date.getMonth().getValue();
        if(month==3||month==6||month==9||month==12){
            return date.getDayOfMonth()==1;
        }
        return false;
    }
    //是否是季度的第一天
    public static boolean ifFirstDayOfQuarter(LocalDate date) {
        int month = date.getMonth().getValue();
        if(month==1||month==4||month==7||month==10){
            return date.getDayOfMonth()==getLastDayOfMonth(date).getDayOfMonth();
        }
        return false;
    }
    //两个季度期间首尾中日期间隔的季度
    public static int getQuarter(LocalDate dateStart, LocalDate dateEnd) {
        return getMonth(dateStart, dateEnd)/4;
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值