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

测试代码:

 package javademo;

 import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date; public class TimeCompare { public static void main(String args[]) throws Exception{
Class.forName("com.mysql.jdbc.Driver");
Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/test_demo?user=root&password=root");
Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery("select * from employ"); while(rs.next()){
String hireDatestr = rs.getString("hiredate");
Date hireDate = new SimpleDateFormat("yyyy-MM-dd").parse(hireDatestr);
System.out.println("(方法一)入职天数: " + compartDay(new Date(), hireDate));
System.out.println("(方法二)入职天数: " + intervalDays(new Date(), hireDate));
System.out.println("入职日期距今月数: " + getMonthSpace(hireDate, new Date()));
System.out.println("入职日期是否超过了2个月:" + afterFewMonth(hireDate, 2));
System.out.println("入职是否已经有半年:" + afterFewMonth(hireDate, 6));
System.out.println("入职是否已经有两周:" + afterFewWeek(hireDate, 2)); System.out.println();
} rs.close();
stmt.close();
conn.close();
} //比较入职日期距今是否过了n个月
public static boolean afterFewMonth(Date hireDate, int n){
boolean result = false; Calendar c = Calendar.getInstance();
c.add(Calendar.MONTH, n); if(hireDate.after(c.getTime())){
result = true;
} return result;
} //比较入职是否有了n周
/**
* Calendar.DATE : 代表天数
* Calendar.WEDNESDAY: 代表周数
* Calendar.MONTH : 代表月数
* Calendar.YEAR :代表年数
*/
public static boolean afterFewWeek(Date hireDate, int n){
boolean result = false; Calendar c = Calendar.getInstance();
c.add(Calendar.WEDNESDAY, n);
System.out.println("计算"+n+"周后日期:" + c.getTime()); if(hireDate.after(c.getTime())){
result = true;
} return result;
} /**
* 比较两个日期之间相差的月数
* 只能比较月数,计算的不精确,只是单纯的月数之间的比较
*/
public static int getMonthSpace(Date start, Date end){
if(start.after(end)){
Date temp = start;
start = end;
end = temp;
} Calendar c = Calendar.getInstance();
c.setTime(start);
int year1 = c.get(Calendar.YEAR);
int month1 = c.get(Calendar.MONTH); c.setTime(end);
int year2 = c.get(Calendar.YEAR);
int month2 = c.get(Calendar.MONTH); int result;
if(year1==year2){
result = month2 - month1;
}else{
result = 12*(year2-year1) + month2 - month1;
} return result;
} /**
* 比较和今天相差的天数 方法一
* 用毫秒计算差值
*/
public static int compartDay(Date date1, Date date2){
if(date1.after(date2)){
Date temp = date1;
date1 = date2;
date2 = temp;
}
long intervalMilli = date2.getTime() - date1.getTime();
return (int)(intervalMilli/(24*60*60*1000));
} /**
* 比较和今天相差的天数方法二 ----不对,纠正结果见下面!!!!!!
* 用日历的日来计算差值
*/
public static int intervalDays(Date date1, Date date2){
if(date1.after(date2)){
Date temp = date1;
date1 = date2;
date2 = temp;
}
Calendar calendar = Calendar.getInstance();
calendar.setTime(date1);
int day1 = calendar.get(Calendar.DAY_OF_YEAR);
calendar.setTime(date2);
int day2 = calendar.get(Calendar.DAY_OF_YEAR);
return day2 - day1;
}
}

控制台打印:

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

上面的方法中,如果不是同一个年份的,计算的结果就不对,参考博客: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

java日期比较例子等...的更多相关文章

  1. java日期操作大全

    摘自(http://www.blogjava.net/i369/articles/83483.html) java日期操作 大全 先来一个:  取得指定月份的第一天与取得指定月份的最后一天  http ...

  2. java日期操作 大全

    先来一个:  取得指定月份的第一天与取得指定月份的最后一天  http://iamin.blogdriver.com/iamin/847990.html ));             }       ...

  3. Java-Runoob:Java 日期时间

    ylbtech-Java-Runoob:Java 日期时间 1.返回顶部 1. Java 日期时间 java.util 包提供了 Date 类来封装当前的日期和时间. Date 类提供两个构造函数来实 ...

  4. 全面解析Java日期时间API

    时区 GMT(Greenwich Mean Time):格林尼治时间,格林尼治标准时间的正午是指当太阳横穿格林尼治子午线时(也就是在格林尼治上空最高点时)的时间. UTC(Universal Time ...

  5. 一文告诉你Java日期时间API到底有多烂

    前言 你好,我是A哥(YourBatman). 好看的代码,千篇一律!难看的代码,卧槽卧槽~其实没有什么代码是"史上最烂"的,要有也只有"史上更烂". 日期是商 ...

  6. [转]Java日期时间使用总结

    原文地址:http://lavasoft.blog.51cto.com/62575/52975/ 一.Java中的日期概述   日期在Java中是一块非常复杂的内容,对于一个日期在不同的语言国别环境中 ...

  7. java日期处理总结

    Java日期时间使用总结   一.Java中的日期概述   日期在Java中是一块非常复杂的内容,对于一个日期在不同的语言国别环境中,日期的国际化,日期和时间之间的转换,日期的加减运算,日期的展示格式 ...

  8. Java日期时间使用总结

    一.Java中的日期概述   日期在Java中是一块非常复杂的内容,对于一个日期在不同的语言国别环境中,日期的国际化,日期和时间之间的转换,日期的加减运算,日期的展示格式都是非常复杂的问题.   在J ...

  9. Java正则表达式匹配例子

    Java正则表达式匹配例子 package com.ibm.test; import java.util.regex.Matcher; import java.util.regex.Pattern; ...

随机推荐

  1. 51nod1709复杂度分析

    题解: 注意到,如果第j位有贡献,那么从i往上跳2^j,然后不能再跳超过2^j. 因此可以考虑倍增. 代码: #include<bits/stdc++.h> typedef long lo ...

  2. Spring MVC和Spring Data JPA之获取数据表数据放在List集合,显示在JSP页面

    涉及到很多xml配置没写:只写具体实现的所有类 1.实体类 对应数据表SYS_SBGL, 主键是SBBM,主键是自动生成的uuid 数据表内容如下(有图有真相): package com.jinhet ...

  3. Syntax error on token(s), misplaced construct(s)

    Syntax error on token(s), misplaced construct(s)

  4. spring学习笔记Core Technologies

    Spring 框架最重要的是Ioc(Inversion of Control)容器,在这个基础之上衍生出了AOP(Aspect-Oriented Programming)技术,80/20法则,这货可以 ...

  5. C++内存管理-重载内存管理函数

    记录学习的点点滴滴,参考侯捷<<C++内存管理>> 我们先重载一下C++的几个内存管理函数 operator new, operator new[], operator del ...

  6. 【转载】Java Web的web.xml文件作用及基本配置

    其实web.xml就是asp.net的web.config一个道理. 说明: 一个web中完全可以没有web.xml文件,也就是说,web.xml文件并不是web工程必须的. web.xml文件是用来 ...

  7. 1.1.1 A+B for Input-Output Practice (I)

    A+B for Input-Output Practice (I) Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K ...

  8. 一个两年Java的面试总结

    前言 16年毕业到现在也近两年了,最近面试了阿里集团(菜鸟网络,蚂蚁金服),网易,滴滴,点我达,最终收到点我达,网易offer,蚂蚁金服二面挂掉,菜鸟网络一个月了还在流程中...最终有幸去了网易.但是 ...

  9. (MyEclipse) MyEclipse完美破解方法(图)

    http://photo.blog.sina.com.cn/list/blogpic.php?pid=53358777td408badc4071&bid=533587770101dd03&am ...

  10. HTTP、TCP、UDP以及SOCKET

    HTTP.TCP.UDP以及SOCKET 一.TCP/IP代表传输控制协议/网际协议,指的是一系列协组. 可分为四个层次:数据链路层.网络层.传输层和应用层. 在网络层:有IP协议.ICMP协议.AR ...