数据库中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. Flask初级(六)flash模板渲染

    Project name :Flask_Plan templates:templates static:static 继续上篇的模板 我们已经可以静态调用模板,包括继承模板,保证了页面的一致性,但是我 ...

  2. avalon 路由问题

    1, 直接使用avalon的 amd加载器, 可以不需要 require.js 2, 配置baseUrl 路径, 这个一定要在 js所在的目录,  而不是jsp所在的目录,  如果js 和jsp分开 ...

  3. GSM中时隙、信道、突发序列、帧的解释

    刚从论坛中看到有人问GSM中时隙.信道.突发序列.帧知识.今天我们数字通信正好上到这一块,我就根据我知道的和网上搜索的回答! 1.时分多路复用技术 FDMA:频分多址 TDMA:时分多址 CDMA:码 ...

  4. 用tornado实现一个简单的websocket样例

    想用SPRING MVC,NODE.JS EXPRESS,TORNADO实现同一个功能,开阔一下视野. 先来TORNADO的吧.. 客户端代码都差不多,主要是服务端代码. TORNADO的说法: ht ...

  5. UI基础:UIButton.UIimage 分类: iOS学习-UI 2015-07-01 21:39 85人阅读 评论(0) 收藏

    UIButton是ios中用来响应用户点击事件的控件.继承自UIControl 1.创建控件 UIButton *button=[UIButton buttonWithType:UIButtonTyp ...

  6. OC基础:数组.字典.集 分类: ios学习 OC 2015-06-18 18:58 47人阅读 评论(0) 收藏

    ==============NSArray(不可变数组)=========== NSArray,继承自NSObject  用来管理(储存)一些有序的对象,不可变数组. 创建一个空数组 NSArray ...

  7. 区间DP(总结)

    学长一晚上的耐心讲解,使我明白区间DP这么高级的东西,还是挺容易的.也就是在一段区间内的动态规划. 下面用例题进行总结. 例题:石子归并. 描述 有N堆石子排成一排,每堆石子有一定的数量.现要将N堆石 ...

  8. 记录几个ubuntu环境下的php相关的路径

    php路径 /usr/bin/php phpize5 /usr/bin/phpize5 php5-fpm /usr/sbin/php5-fpm php所有的配置文件 /etc/php5/fpm 重启p ...

  9. HDU 4669 Mutiples on a circle 数位DP

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=4669 考察对取模的的理解深不深刻啊,当然还有状态的设计····设d[i][j]表示以第i个数结尾,余 ...

  10. poj2253 最短路

    题意:青蛙跳石头,给出石头的坐标,然后要确定一条路径,使路径上的最大跨度最小,其实也是一道最短路问题,只要将更新条件从总距离最短改为最大跨度最小就行,即从某点到当前点路径上的最大跨度如果小于当前点原本 ...