广告位联系
返回顶部
分享到

java计算日期相差天数的4种简单方法介绍

java 来源:互联网 作者:佚名 发布时间:2024-06-22 22:08:23 人浏览
摘要

方法1:long值相减(推荐) 1 2 3 4 5 6 7 8 9 10 11 12 public static void main(String[] args) { DateFormat dateFormat = new SimpleDateFormat(yyyy-MM-dd HH:mm:ss); try { Date startDate = dateFormat.parse(2024-03-01 10:00:00);//开始时间 Dat

方法1:long值相减(推荐)

1

2

3

4

5

6

7

8

9

10

11

12

public static void main(String[] args) {

        DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

         try {

                Date startDate = dateFormat.parse("2024-03-01 10:00:00");//开始时间

                Date endDate = dateFormat.parse("2024-03-02 14:00:00");//结束时间

                long msNum = endDate.getTime()-startDate.getTime();//时间戳相差的毫秒数

                long dayNum = msNum/(24*60*60*1000)//除以一天的毫秒数,得到相差天数

                System.out.println("相差天数为:"+ dayNum);

         } catch (ParseException e) {

                e.printStackTrace();

         }

}

方法2:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

public static void main(String[] args) {

        DateFormat dft = new SimpleDateFormat("yyyy-MM-dd");

        try {

            Date star = dft.parse("2020-02-03");//开始时间

            Date endDay=dft.parse("2025-03-02");//结束时间

            Date nextDay=star;

            int i=0;

            while(nextDay.before(endDay)){//当明天不在结束时间之前是终止循环

                Calendar cld = Calendar.getInstance();

                cld.setTime(star);

                cld.add(Calendar.DATE, 1);

                star = cld.getTime();

                //获得下一天日期字符串

                nextDay = star;

                i++;

            }

           System.out.println("相差天数为:"+i);

        } catch (ParseException e) {

            e.printStackTrace();

        }

    }

方法3:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

public static void main(String[] args) {

        String star="2020-02-03";

        String end="2025-03-02";

        String[] star1=star.split("-");

        String[] end1=end.split("-");

        int days=0;

        if(Integer.parseInt(star1[0])<Integer.parseInt(end1[0])){

            for(int i=Integer.parseInt(star1[0]);i<Integer.parseInt(end1[0]);i++){

                //计算是否是瑞年

                if(i%4==0&&i%100!=0||i%400==0){

                    days+=366;

                }else{

                    days+=365;

                }

            }

        }

        //得到开始那一年已过去的日期

        int starday=days(star1[0],star1[1],star1[2]);

        //得到结束那一年已过去的日期

        int endday=days(end1[0],end1[1],end1[2]);

        //减去开始那一年已过去的日期,加上结束那一年已过去的日期

        days=days-starday+endday;

        System.out.println("相差的天数:"+days);

    }

    public static int days(String year,String month,String day){

        int days=0;

        int nowyear=Integer.parseInt(year);

        int[] monthday={0,31,28,31,30,31,30,31,31,30,31,30,31};

        int[] monthday1={0,31,29,31,30,31,30,31,31,30,31,30,31};

        boolean flag=true;

        if(nowyear%4==0&&nowyear%100!=0||nowyear%400==0){

        }else{

            flag=false;

        }

        for(int i=0;i<Integer.parseInt(month);i++){

            if(flag){

                days+=monthday1[i];

            }else{

                days+=monthday[i];

            }

        }

        days+=Integer.parseInt(day);

        return days;

    }

方法4:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

int y;

    int m;

    int d;

 

    public test2(int y,int m,int d ){

        this.y=y;

        this.m=m;

        this.d=d;

    }

    public int sum(test2 d){

        int day=0;

        int[] x={0,31,28,31,30,31,30,31,31,30,31,30,31};

        for(int i=1;i<d.y;i++){

            if(i%4==0&& i%100!=0 || i%400==0){

                day+=366;

            }else{

                day+=365;

            }

        }

        if(d.y%4==0&& d.y%100!=0 || d.y%400==0){

            x[2]=29;

        }

        for(int i=1;i<d.m;i++){

 

            day+=x[i]; 

        }

        day+=d.d;

        System.out.println(day);

        return day;

 

    }

    public int DiffDays(test2 d){//计算两个日期之间的相距天数的成员方法

        int s1=sum(this);

        int s2=sum(d);

        if(s1>s2){

            return s1-s2;

        }else{

            return s2-s1;

        }

    }

    public static void main(String args[]){

        int a,b,c;

        test2 d1,d2;

        try{

            d1=new test2(2020,02,03);

            d2=new test2(2025,03,02);

            System.out.println("相差的天数:"+d1.DiffDays(d2));

        }catch(Exception e){

            System.out.println("error");

        }

    }

附:计算两个日期相差天数(除去双休日)

首先可以将问题简化一下,可以知道,不论开始、结束日期,只要经过7天,必定就有两天是周末。因此问题可以简化为,一周内的双休日天数+周数*2.

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

public int checkWeekendDay(int startDate, int endDate, int days){

        int weekEndCount = 0;

        if (days<1){

            if (startDate==6 || startDate==0){

                weekEndCount+=1;

            }

        } else {

            weekEndCount+=(days/7)*2;

            weekEndCount+=calculateWeekendDays(startDate,endDate);

        }

 

        return weekEndCount;

    }

 

public int calculateWeekendDays(int startDate, int endDate){

        int weekendCount=0;

        if (startDate==0&&endDate==6) {

            weekendCount += 2;

        }else if (startDate<endDate&&endDate==6){

            weekendCount+=1;

        }else if (startDate<endDate&&startDate==0){

            weekendCount+=1;

        }else if (startDate>endDate){

            weekendCount+=2;

        }

        if (startDate==endDate){

            if (startDate==6||endDate==0){

                weekendCount+=1;

            }

        }

 

        return weekendCount;

    }


版权声明 : 本文内容来源于互联网或用户自行发布贡献,该文观点仅代表原作者本人。本站仅提供信息存储空间服务和不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权, 违法违规的内容, 请发送邮件至2530232025#qq.cn(#换@)举报,一经查实,本站将立刻删除。
原文链接 :
相关文章
  • springboot /tmp临时目录的具体实现
    1.生成机制 在linux系统中,springboot应用服务再启动(java -jar 命令启动服务)的时候,会在操作系统的/tmp目录下生成一个tomcat*的文件目录,
  • java计算日期相差天数的4种简单方法介绍
    方法1:long值相减(推荐) 1 2 3 4 5 6 7 8 9 10 11 12 public static void main(String[] args) { DateFormat dateFormat = new SimpleDateFormat(yyyy-MM-dd HH:mm:ss); try { Date
  • SpringCloudStream原理和深入使用介绍

    SpringCloudStream原理和深入使用介绍
    Spring Cloud Stream是一个用于构建与共享消息传递系统连接的高度可扩展的事件驱动型微服务的框架。 应用程序通过inputs或outputs来与Spring Clo
  • gRPC在Java中的实现与应用介绍
    gRPC是由Google开发的高性能、开源的通用远程过程调用(RPC)框架,它基于HTTP/2标准设计,提供了多语言支持,包括Java、C++、Python等。gRPC特别适
  • SpringBoot中@FeignClient注解的作用
    在微服务架构中,服务之间的调用是非常频繁的。为了简化服务之间的调用,Spring Boot 提供了一个叫做 Feign 的组件。Feign 可以帮助我们定义
  • MyBatis-Plus介绍及Spring Boot 3集成指南

    MyBatis-Plus介绍及Spring Boot 3集成指南
    我们每个Java开发者都在使用springboot+mybatis开发时,我们经常发现自己需要为每张数据库表单独编写XML文件,并且为每个表都需要编写一套增
  • MyBatis与Spring中的SqlSession介绍
    在 MyBatis 中,你可以使用 SqlSessionFactory 来创建 SqlSession。 一旦你获得一个 session 之后,你可以使用它来执行映射了的语句,提交或回滚连接
  • java获取IP和IP的归属地的方法

    java获取IP和IP的归属地的方法
    在Java中,获取IP地址通常指的是获取本地机器的IP地址或者通过某种方式(如HTTP请求)获取的远程IP地址。代码案例如下: 而要获取IP的归属
  • idea没有services窗口、没有springboot启动项问题

    idea没有services窗口、没有springboot启动项问题
    idea没有services窗口、没有springboot启动项 idea没有services窗口 没有springboot启动项。 如果是找不到services窗口,可以在views的tools Windows下找到
  • Springboot限制IP访问指定的网址实现

    Springboot限制IP访问指定的网址实现
    IP黑白名单是网络安全管理中常见的策略工具,用于控制网络访问权限,根据业务场景的不同,其应用范围广泛 方式一: 添加一个简单的白
  • 本站所有内容来源于互联网或用户自行发布,本站仅提供信息存储空间服务,不拥有版权,不承担法律责任。如有侵犯您的权益,请您联系站长处理!
  • Copyright © 2017-2022 F11.CN All Rights Reserved. F11站长开发者网 版权所有 | 苏ICP备2022031554号-1 | 51LA统计