zoukankan      html  css  js  c++  java
  • java日期比较例子等...

    数据库中employ表,入职日期,今天日期:

    测试代码:

      1 package javademo;
      2 
      3 import java.sql.Connection;
      4 import java.sql.DriverManager;
      5 import java.sql.ResultSet;
      6 import java.sql.Statement;
      7 import java.text.SimpleDateFormat;
      8 import java.util.Calendar;
      9 import java.util.Date;
     10 
     11 public class TimeCompare {
     12     
     13     public static void main(String args[]) throws Exception{
     14         Class.forName("com.mysql.jdbc.Driver");
     15         Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/test_demo?user=root&password=root");
     16         Statement stmt = conn.createStatement();
     17         ResultSet rs = stmt.executeQuery("select * from employ");
     18         
     19         while(rs.next()){
     20             String hireDatestr = rs.getString("hiredate");
     21             Date hireDate = new SimpleDateFormat("yyyy-MM-dd").parse(hireDatestr);
     22             System.out.println("(方法一)入职天数: " + compartDay(new Date(), hireDate));
     23             System.out.println("(方法二)入职天数: " + intervalDays(new Date(), hireDate));
     24             System.out.println("入职日期距今月数: " + getMonthSpace(hireDate, new Date()));
     25             System.out.println("入职日期是否超过了2个月:" + afterFewMonth(hireDate, 2));
     26             System.out.println("入职是否已经有半年:" + afterFewMonth(hireDate, 6));
     27             System.out.println("入职是否已经有两周:" + afterFewWeek(hireDate, 2));
     28             
     29             System.out.println();
     30         }
     31         
     32         rs.close();
     33         stmt.close();
     34         conn.close();
     35     }
     36     
     37     //比较入职日期距今是否过了n个月
     38     public static boolean afterFewMonth(Date hireDate, int n){
     39         boolean result = false;
     40 
     41         Calendar c = Calendar.getInstance();
     42         c.add(Calendar.MONTH, n);
     43         
     44         if(hireDate.after(c.getTime())){
     45             result = true;
     46         }
     47         
     48         return result;
     49     }
     50     
     51     //比较入职是否有了n周
     52     /**
     53      * Calendar.DATE  : 代表天数
     54      * Calendar.WEDNESDAY: 代表周数
     55      * Calendar.MONTH : 代表月数
     56      * Calendar.YEAR :代表年数
     57      */
     58     public static boolean afterFewWeek(Date hireDate, int n){
     59         boolean result = false;
     60 
     61         Calendar c = Calendar.getInstance();
     62         c.add(Calendar.WEDNESDAY, n);
     63         System.out.println("计算"+n+"周后日期:" + c.getTime());
     64         
     65         if(hireDate.after(c.getTime())){
     66             result = true;
     67         }
     68         
     69         return result;
     70     }
     71     
     72     /**
     73      * 比较两个日期之间相差的月数
     74      * 只能比较月数,计算的不精确,只是单纯的月数之间的比较
     75      */
     76     public static int getMonthSpace(Date start, Date end){
     77         if(start.after(end)){
     78             Date temp = start;
     79             start = end;
     80             end = temp;
     81         }
     82         
     83         Calendar c = Calendar.getInstance();
     84         c.setTime(start);
     85         int year1 = c.get(Calendar.YEAR);
     86         int month1 = c.get(Calendar.MONTH);
     87         
     88         c.setTime(end);
     89         int year2 = c.get(Calendar.YEAR);
     90         int month2 = c.get(Calendar.MONTH);
     91         
     92         int result;
     93         if(year1==year2){
     94             result = month2 - month1;
     95         }else{
     96             result = 12*(year2-year1) + month2 - month1;
     97         }
     98         
     99         return result;
    100     }
    101     
    102     /**
    103      * 比较和今天相差的天数 方法一
    104      * 用毫秒计算差值
    105      */
    106     public static int compartDay(Date date1, Date date2){
    107         if(date1.after(date2)){
    108             Date temp = date1;
    109             date1 = date2;
    110             date2 = temp;
    111         }
    112         long intervalMilli = date2.getTime() - date1.getTime();
    113         return (int)(intervalMilli/(24*60*60*1000));
    114     }
    115     
    116     /**
    117      * 比较和今天相差的天数方法二   ----不对,纠正结果见下面!!!!!!
    118      * 用日历的日来计算差值
    119      */
    120     public static int intervalDays(Date date1, Date date2){
    121         if(date1.after(date2)){
    122             Date temp = date1;
    123             date1 = date2;
    124             date2 = temp;
    125         }
    126         Calendar calendar = Calendar.getInstance();
    127         calendar.setTime(date1);
    128         int day1 = calendar.get(Calendar.DAY_OF_YEAR);
    129         calendar.setTime(date2);
    130         int day2 = calendar.get(Calendar.DAY_OF_YEAR);
    131         return day2 - day1;
    132     }
    133 }

    控制台打印:

    纠正:比较和今天相差的天数方法二  这个计算方法不对。更新如下:

    上面的方法中,如果不是同一个年份的,计算的结果就不对,参考博客:https://blog.csdn.net/ZeroBz/article/details/80757391

    代码如下:

    package com.cy.test.date;
    
    import java.text.ParseException;
    import java.text.SimpleDateFormat;
    import java.util.Calendar;
    import java.util.Date;
    
    public class TestDate2 {
    
        public static void main(String[] args) throws ParseException {
            String str = "2010-08-19 14:20:00";
            SimpleDateFormat s = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    
            Date date1 = s.parse(str);
            Date date2 = new Date();
    
            System.out.println(intervalDays1(date1, date2));
            System.out.println(intervalDays2(date1, date2));
        }
    
        /**
         * 方法一
         * 计算两个日期的天数之差 这里默认date1<date2,date精确到时分秒
         * 使用日历的日来计算差值
         * @param date1
         * @param date2
         * @return
         */
        public static int intervalDays1(Date date1, Date date2){
            Calendar calendar = Calendar.getInstance();
            calendar.setTime(date1);
            int day1 = calendar.get(Calendar.DAY_OF_YEAR);
            int year1 = calendar.get(Calendar.YEAR);
    
            calendar.setTime(date2);
            int day2 = calendar.get(Calendar.DAY_OF_YEAR);
            int year2 = calendar.get(Calendar.YEAR);
    
            if (year1 != year2) {   //不同年
                int timeDistance = 0;
                for (int i = year1; i < year2; i++) {
                    if (i % 4 == 0 && i % 100 != 0 || i % 400 == 0) {  //闰年
                        timeDistance += 366;
                    }else{  //平年
                        timeDistance += 365;
                    }
                }
                return timeDistance + (day2 - day1);
            }else{
                return day2 - day1;
            }
        }
    
        /**
         * 方法二
         * 计算两个日期的天数之差 这里默认date1<date2,date精确到时分秒
         * 使用SimpleDateFormat将时分秒的日期转化为只有年月日,再利用毫秒计算差值
         * @param date1
         * @param date2
         * @return
         */
        public static int intervalDays2(Date date1, Date date2){
            SimpleDateFormat s = new SimpleDateFormat("yyyy-MM-dd");
            try {
                Date day1 = s.parse(s.format(date1));
                Date day2 = s.parse(s.format(date2));
                int intervalDay = (int) ((day2.getTime() - day1.getTime()) / (1000 * 60 * 60 * 24));
                return intervalDay;
            } catch (Exception e) {
                e.printStackTrace();
                System.out.println("calculateTkDay,parseException");
            }
            return 0;
        }
    
    }

    console打印结果计算结果相同:

    3289
    3289
  • 相关阅读:
    LeetCode 368Largest Divisible Subset
    macbook 源码安装 redis6.2.6
    macbook 源码安装 nginx1.20.1
    MySQL总结
    DataWork之 MaxComputer的使用
    Spring的IOC源码分析
    Spring Bean的生命周期
    SpringMVC工作原理
    Spring全家桶(二)之SpringMVC总结
    (已经成功部署)配置vue+nginx+uwsgi luffy项目
  • 原文地址:https://www.cnblogs.com/tenWood/p/6493153.html
Copyright © 2011-2022 走看看