java日期比较例子等...
数据库中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日期比较例子等...的更多相关文章
- java日期操作大全
摘自(http://www.blogjava.net/i369/articles/83483.html) java日期操作 大全 先来一个: 取得指定月份的第一天与取得指定月份的最后一天 http ...
- java日期操作 大全
先来一个: 取得指定月份的第一天与取得指定月份的最后一天 http://iamin.blogdriver.com/iamin/847990.html )); } ...
- Java-Runoob:Java 日期时间
ylbtech-Java-Runoob:Java 日期时间 1.返回顶部 1. Java 日期时间 java.util 包提供了 Date 类来封装当前的日期和时间. Date 类提供两个构造函数来实 ...
- 全面解析Java日期时间API
时区 GMT(Greenwich Mean Time):格林尼治时间,格林尼治标准时间的正午是指当太阳横穿格林尼治子午线时(也就是在格林尼治上空最高点时)的时间. UTC(Universal Time ...
- 一文告诉你Java日期时间API到底有多烂
前言 你好,我是A哥(YourBatman). 好看的代码,千篇一律!难看的代码,卧槽卧槽~其实没有什么代码是"史上最烂"的,要有也只有"史上更烂". 日期是商 ...
- [转]Java日期时间使用总结
原文地址:http://lavasoft.blog.51cto.com/62575/52975/ 一.Java中的日期概述 日期在Java中是一块非常复杂的内容,对于一个日期在不同的语言国别环境中 ...
- java日期处理总结
Java日期时间使用总结 一.Java中的日期概述 日期在Java中是一块非常复杂的内容,对于一个日期在不同的语言国别环境中,日期的国际化,日期和时间之间的转换,日期的加减运算,日期的展示格式 ...
- Java日期时间使用总结
一.Java中的日期概述 日期在Java中是一块非常复杂的内容,对于一个日期在不同的语言国别环境中,日期的国际化,日期和时间之间的转换,日期的加减运算,日期的展示格式都是非常复杂的问题. 在J ...
- Java正则表达式匹配例子
Java正则表达式匹配例子 package com.ibm.test; import java.util.regex.Matcher; import java.util.regex.Pattern; ...
随机推荐
- C/C++除法实现方式及负数取模详解
一.下面的题目你能全做对吗? 1.7/4=? 2.7/(-4)=? 3.7%4=? 4.7%(-4)=? 5.(-7)/4=? 6.(-7)%4=? 7.(-7)/(unsigned)4=? 答案: ...
- SharePoint Web应用程序管理-PowerShell
1. 显示场中的Web应用程序 Get-SPWebApplication 2. 获取指定的Web应用程序 $webApp = Get-SPWebApplication -Identity " ...
- python Gevent – 高性能的Python并发框架
话说gevent也没个logo啥的,于是就摆了这张图= =|||,首先这是一种叫做greenlet的鸟,而在python里,按照官方解释greenlet是轻量级的并行编程,而gevent呢,就是利用g ...
- HDU 4185
http://acm.hdu.edu.cn/showproblem.php?pid=4185 两个挨着的'#'可以配成一对,求最多能配成几对 挨着的'#'就连边,然后求一次最大匹配,答案是最大匹配除以 ...
- matplotlib 操作子图(subplot,axes)
Matplotlib 中文用户指南 3.3 使用 GridSpec 自定义子图位置 ax:matplotlib.axes._subplots.AxesSubplot,的基本操作 ax.set_xtic ...
- rar ubuntu
http://jingyan.baidu.com/article/1612d5004095eee20e1eeeab.html sudo 7z x ***.rar
- webbench-1.5_hacking
/**************************************************************************** * * webbench-1.5_hacki ...
- I.MX6 Linux Qt 启动流程跟踪
/************************************************************************** * I.MX6 Linux Qt 启动流程跟踪 ...
- vector类转换Mat类
前言 一个个数据push back到vector之后,可以使用Mat()函数将vector类型转换为Mat类型. 在opencv中Mat类的构造函数中有一个构造函数可以直接把vector类转换为Mat ...
- 在python中的使用
操作步骤: 1. 连接数据库,生成数据库连接对象 conn = pymongo.MongoClient('localhost',27017) 2. 选择要操作的数据库,生成数据库对象 (__setit ...