数据库中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. 关于apicloud ios自定义模块引用第三方framework not found for architecture armv7

    1 .自定义模块 新建模块必须是静态库 2.使用的第三方framework 必须要把 .h文件开放出来 3.编译要用 真机模式 (上传模块以后,自定义load要编译,用生成的二维码调试) 4. 添加监 ...

  2. E - An Awful Problem 求两段时间内满足条件的天数//lxm

    In order to encourage Hiqivenfin to study math, his mother gave him a sweet candy when the day of th ...

  3. [python] 基于词云的关键词提取:wordcloud的使用、源码分析、中文词云生成和代码重写

    1. 词云简介 词云,又称文字云.标签云,是对文本数据中出现频率较高的“关键词”在视觉上的突出呈现,形成关键词的渲染形成类似云一样的彩色图片,从而一眼就可以领略文本数据的主要表达意思.常见于博客.微博 ...

  4. 了解dto概念,什么是DTO

    了解dto概念   此博文收集整理了一些主流的文章对于DTO模式的解读,他们大体相似而又各有所不同.对于设计模式的解读也是一个仁者见仁智者见智的事情,不过设计模式往往都是前辈们在遇到一类特定的问题下而 ...

  5. Fire Game 双向bfs

    Fat brother and Maze are playing a kind of special (hentai) game on an N*M board (N rows, M columns) ...

  6. 有锁Iphone 3GS 6.0.1 降级刷到4.2.1 完美越狱+解锁

    2012-12-20 百度空间所写 前言:由于之前的3GS升级到6.0.1后会有重启之后无法打电话的情况,同学觉得这样很烦,搞得手机不像个手机了.但是这也是没办法的,毕竟是不完美越狱加软解锁的.于是, ...

  7. test20180902 day1

    试题限制均为256MB,1Sec 总分:250 试题一 谜题 首先请解以下谜题:车下的数字是什么? 正确的答案是 87 .这道题对小龙大犇来说太轻松了,于是他想加强难度来考考你:对于给定的长度 N,能 ...

  8. 【转】python mysql数据库 'latin-1' codec can't encode character错误问题解决

    UnicodeEncodeError: 'latin-1' codec can't encode character   "UnicodeEncodeError:'latin-1' code ...

  9. gitlab使用笔记

    一.git环境搭建 1.百度gitlab,找到其官网,注册gitlab账号(需要打开FQ软件),登录. 2.点击Profile Settings,然后点击SSH Keys 3.虚拟机中执行:ssh-k ...

  10. pipelinedb Continuous transforms 操作

    Continuous transforms 可以进行数据的转换,数据是不进行存储,主要是可以加入到其他的stream pipeline 中,或者写到其他外部 存储中,和存储过程结合使用,当前默认内置一 ...