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; ...
随机推荐
- weblogic控制台定制不同权限的用户
安装weblogic并创建域(domain)的时候,会默认创建一个用户,此用户为管理员,也就是权限最大的.只有这样一个用户,用起来很不安全,因为一个测试环境,好多人在用,经常会有人修改上面的数据源等关 ...
- 玩转X-CTR100 l STM32F4 l 电机正交编码器
我造轮子,你造车,创客一起造起来!塔克创新资讯[塔克社区 www.xtark.cn ][塔克博客 www.cnblogs.com/xtark/ ] 本文介绍X-CTR100控制器的电机正交编码器,X- ...
- DevExpress v17.2新版亮点—WPF篇(六)
用户界面套包DevExpress v17.2终于正式发布,本站将以连载的形式为大家介绍各版本新增内容.本文将介绍了DevExpress WPF v17.2 新的Hamburger Menu.Sched ...
- 【DevExpress v17.2新功能预告】DevExpress ASP.NET Scheduler新的自适应功能
自适应Web设计可以帮助您解决各种尺寸的屏幕问题,网站的自适应网页设计可帮助您解决用户使用不同大小屏幕显示数据的问题. 在v17.2中,我们最大化了ASP.NET Scheduler的视图和可视化元素 ...
- css 和 UI 框架 ---------- vue 待续
vue 框架组件集合 radon-UI: 他人评价 -- 一个帮助你快速开发产品的Vue组件库,简洁好用,效率高,让你摆脱各种定制化的烦恼. 个人感觉 -- 组件简洁, 功能全面, 文档清晰 ...
- FMX StringGrid向上滑动自动加载记录(一)
有时候,做的app还是需要用StringGrid来显示数据,但如果用StringGrid的Livebinding绑定到一个数据集TDataset,当记录超过1000条时,效率非常低,甚至达不到实用状态 ...
- 一起来点React Native——常用组件之Text
一.什么是Text组件? 一个用于显示文本的React组件,和Android中的TextView组件或者OC中的Label组件相类似,专门用来显示基本的文本信息:除了基本的显示布局之外,可以进行嵌套显 ...
- OC基础:实例变量和成员变量的区别 分类: ios学习 OC 2015-06-14 17:59 16人阅读 评论(0) 收藏
摘要: Objective-C 引入了"实例变量"的概念,但同时, 也经常出现 "成员变量"的声音. 到底什么是实例变量,什么是成员变量,二者的区别是什么呢 ...
- [LeetCode&Python] Problem 897. Increasing Order Search Tree
Given a tree, rearrange the tree in in-order so that the leftmost node in the tree is now the root o ...
- HDU 4669 Mutiples on a circle 数位DP
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=4669 考察对取模的的理解深不深刻啊,当然还有状态的设计····设d[i][j]表示以第i个数结尾,余 ...