JAVA 日期 时间函数

计算某一年某一月的天数

    public static void getDayOfMonth (int year, int month) {
        // 获取日历实例
        Calendar time=Calendar.getInstance();
        time.clear();
        // 设置年
        time.set(Calendar.YEAR,year);
        // 设置月份
        time.set(Calendar.MONTH,month);//注意,Calendar对象默认一月为0
        int day=time.getActualMaximum(Calendar.DAY_OF_MONTH);//本月份的天数
        System.out.println(year + "年" + (month + 1) + "月份有" + day + "天");
    }

Calendar和Date转化

        // 获取时间戳对应的时间
        Date d = new Date(1683976366L * 1000);
        Calendar cal = Calendar.getInstance();
        
        //Date转Calendar
        cal.setTime(d);

        //Calendar转换为Date
        Date d2 = cal.getTime();
        
        System.out.println(d.toString());
        System.out.println("=================");
        System.out.println(d2.toString());

运行结果
在这里插入图片描述

格式化输出日期时间

        Date date=new Date();
        // 注意:这里入参中"HH"如果写成"hh",获取的时间可能少12小时
        SimpleDateFormat df=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        SimpleDateFormat df2=new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
        System.out.println(df.format(date));
        System.out.println(df2.format(date));

运行结果
在这里插入图片描述

计算一年中的第几个星期

计算某一天是一年中的第几个星期

        // 2023年1月20是今年的第几个星期
        Calendar cal=Calendar.getInstance();
        cal.set(Calendar.YEAR, 2023);
        cal.set(Calendar.MONTH, 0);
        cal.set(Calendar.DAY_OF_MONTH, 29);
        int week=cal.get(Calendar.WEEK_OF_YEAR);
        System.out.println(week);

运行结果
在这里插入图片描述

计算某一天是星期几

        SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
        Date date= formatter.parse("2023-06-01");
        SimpleDateFormat formatter1 = new SimpleDateFormat("E");
        System.out.println(formatter1.format(date));

运行结果
在这里插入图片描述

计算一年中的第几个星期是几号

        // 2023年第20周的周一是几号
        SimpleDateFormat df=new SimpleDateFormat("yyyy-MM-dd");
        Calendar cal=Calendar.getInstance();
        cal.set(Calendar.YEAR, 2023);
        cal.set(Calendar.WEEK_OF_YEAR, 20);
        cal.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY);
        System.out.println(df.format(cal.getTime()));

运行结果
在这里插入图片描述

年月周求日期

        SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM F E");
        Date date= formatter.parse("2023-05 5 星期一");
        SimpleDateFormat formatter1 = new SimpleDateFormat("yyyy-MM-dd");
        System.out.println(formatter1.format(date));

运行结果
在这里插入图片描述

add()和roll()

add()

        SimpleDateFormat df=new SimpleDateFormat("yyyy-MM-dd");
        Calendar cal=Calendar.getInstance();
        cal.set(Calendar.YEAR, 2023);
        cal.set(Calendar.MONTH, 4);
        cal.set(Calendar.DAY_OF_MONTH, 13);
        // 输出5月13号前4天是几号
        cal.add(Calendar.DATE, -4);
         Date date=cal.getTime();
        System.out.println(df.format(date));

运行结果
在这里插入图片描述

roll()

roll()在本月内循环,add()比较常用

        SimpleDateFormat df=new SimpleDateFormat("yyyy-MM-dd");
        Calendar cal=Calendar.getInstance();
        cal.set(Calendar.YEAR, 2023);
        cal.set(Calendar.MONTH, 4);
        cal.set(Calendar.DAY_OF_MONTH, 31);
        cal.roll(Calendar.DATE, 4);
        Date date=cal.getTime();
        System.out.println(df.format(date));
        cal.roll(Calendar.DATE, -4);
        date=cal.getTime();
        System.out.println(df.format(date));

运行结果
在这里插入图片描述

计算两个任意时间中间间隔天数

传值为Calendar类型

    public static void getIntervalDays (Calendar startDay, Calendar endDay) {
        long startMsl = startDay.getTimeInMillis();
        long endtMsl = endDay.getTimeInMillis();
        long intervalMsl = endtMsl - startMsl;
        int intervalDay = (int)(intervalMsl / (24 * 60 * 60 * 1000));
        System.out.println(intervalDay);
    }

传值为Date类型

错误演示
    public static void getIntervalDays (Date startDay, Date endDay) {
        long startMsl = startDay.getTime();
        long endtMsl = endDay.getTime();
        long intervalMsl = endtMsl - startMsl;
        int intervalDay = (int)(intervalMsl / (24 * 60 * 60 * 1000));
        System.out.println(intervalDay);
    }

注意:这个代码中如果结束时间和开始时间相差12小时,算出来的相差天数为0。因为 intervalMsl / (24 * 60 * 60 * 1000) = 0(long类型的值/long类型的值,结果也为long类型)

正确方法
    public static void getIntervalDays (Date startDay, Date endDay) {
        long startMsl = startDay.getTime();
        long endtMsl = endDay.getTime();
        long intervalMsl = endtMsl - startMsl;
        // 这里对intervalMsl做了类型强转,转为double类型。(double) intervalMsl / (24 * 60 * 60 * 1000)结果是0.5,然后通过Math.ceil()向上取整
        int intervalDay = (int)(Math.ceil((double) intervalMsl / (24 * 60 * 60 * 1000)));
        System.out.println(intervalDay);
    }

获取系统的当前时间

    public static void getCurTime () {
        Long ctm = System.currentTimeMillis();
        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        System.out.println(simpleDateFormat.format(ctm));
    }

运行结果
在这里插入图片描述

字符串转化为时间类型

        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("M/dd/yyyy hh:mm:ss a", java.util.Locale.US);
        Date date = simpleDateFormat.parse("5/13/2023 10:31:37 PM");
        SimpleDateFormat simpleDateFormat1 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        System.out.println(simpleDateFormat1.format(date));

运行结果
在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值