Java对日期Date类进行日期加减运算,年份加减,月份加减
package com.cy; import java.security.InvalidParameterException;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.HashMap;
import java.util.Map; public class DateUtils {
private static final long MILLIS_IN_A_SECOND = 1000; private static final long SECONDS_IN_A_MINUTE = 60; private static final int MONTHS_IN_A_YEAR = 12; /**
* 获得指定日期之后一段时期的日期。例如某日期之后3天的日期等 时间为23:59:59。
*
* @param origDate
* 基准日期
* @param amount
* 时间数量
* @param timeUnit
* 时间单位,如年、月、日等。用Calendar中的常量代表
* @return {@link Date}
*/
public static final Date dateAfter(Date origDate, int amount, int timeUnit) {
Calendar calendar = Calendar.getInstance();
calendar.setTime(origDate);
// 将小时至0
// calendar.set(Calendar.HOUR_OF_DAY, 23);
// 将分钟至0
// calendar.set(Calendar.MINUTE, 59);
// 将秒至0
// calendar.set(Calendar.SECOND, 59);
// 将毫秒至0
// calendar.set(Calendar.MILLISECOND, 0);
calendar.add(timeUnit, amount);
return calendar.getTime();
} /**
* 获得指定日期之后一段时期的日期。例如某日期之后3天的日期等。
*
* @param origDate
* 基准日期
* @param amount
* 时间数量
* @param timeUnit
* 时间单位,如年、月、日等。用Calendar中的常量代表
* @return {@link Date}
*/
public static final Date timeAfter(Date origDate, int amount, int timeUnit) {
Calendar calendar = Calendar.getInstance();
calendar.setTime(origDate);
calendar.add(timeUnit, amount);
return calendar.getTime();
} /**
* 获得指定日期之前一段时期的日期。例如某日期之前3天的日期等。
*
* @param origDate
* 基准日期
* @param amount
* 时间数量
* @param timeUnit
* 时间单位,如年、月、日等。用Calendar中的常量代表
* @return {@link Date}
*/
public static final Date dateBefore(Date origDate, int amount, int timeUnit) {
Calendar calendar = Calendar.getInstance();
calendar.add(timeUnit, -amount);
return calendar.getTime();
} /**
* 根据年月日构建日期对象。注意月份是从1开始计数的,即month为1代表1月份。
*
* @param year
* 年
* @param month
* 月。注意1代表1月份,依此类推。
* @param day
* 日
* @return {@link Date}
*/
public static Date date(int year, int month, int date) {
Calendar calendar = Calendar.getInstance();
calendar.set(year, month - 1, date, 0, 0, 0);
calendar.set(Calendar.MILLISECOND, 0);
return calendar.getTime();
} /**
* 计算两个日期(不包括时间)之间相差的周年数
*
* @param date1
* 开始时间
* @param date2
* 结束时间
* @return {@link Integer}
*/
public static int getYearDiff(Date date1, Date date2) {
if (date1 == null || date2 == null) {
throw new InvalidParameterException("date1 and date2 cannot be null!");
}
if (date1.after(date2)) {
throw new InvalidParameterException("date1 cannot be after date2!");
} Calendar calendar = Calendar.getInstance();
calendar.setTime(date1);
int year1 = calendar.get(Calendar.YEAR);
int month1 = calendar.get(Calendar.MONTH);
int day1 = calendar.get(Calendar.DATE); calendar.setTime(date2);
int year2 = calendar.get(Calendar.YEAR);
int month2 = calendar.get(Calendar.MONTH);
int day2 = calendar.get(Calendar.DATE); int result = year2 - year1;
if (month2 < month1) {
result--;
} else if (month2 == month1 && day2 < day1) {
result--;
}
return result;
} /**
* 计算两个日期(不包括时间)之间相差的整月数
*
* @param date1
* 开始时间
* @param date2
* 结束时间
* @return {@link Integer}
*/
public static int getMonthDiff(Date date1, Date date2) {
if (date1 == null || date2 == null) {
throw new InvalidParameterException("date1 and date2 cannot be null!");
}
if (date1.after(date2)) {
throw new InvalidParameterException("date1 cannot be after date2!");
} Calendar calendar = Calendar.getInstance();
calendar.setTime(date1);
int year1 = calendar.get(Calendar.YEAR);
int month1 = calendar.get(Calendar.MONTH);
int day1 = calendar.get(Calendar.DATE); calendar.setTime(date2);
int year2 = calendar.get(Calendar.YEAR);
int month2 = calendar.get(Calendar.MONTH);
int day2 = calendar.get(Calendar.DATE); int months = 0;
if (day2 >= day1) {
months = month2 - month1;
} else {
months = month2 - month1 - 1;
}
return (year2 - year1) * MONTHS_IN_A_YEAR + months;
} /**
* 统计两个日期之间包含的天数。包含date1,但不包含date2
*
* @param date1
* 开始时间
* @param date2
* 结束时间
* @return {@link Integer}
* @throws ParseException
*/
public static int getDayDiff(Date date1, Date date2) {
if (date1 == null || date2 == null) {
throw new InvalidParameterException("date1 and date2 cannot be null!");
}
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
Date smdate;
try {
smdate = sdf.parse(sdf.format(date1));
Date bdate = sdf.parse(sdf.format(date2));
Calendar cal = Calendar.getInstance();
cal.setTime(smdate);
long time1 = cal.getTimeInMillis();
cal.setTime(bdate);
long time2 = cal.getTimeInMillis();
long between_days = (time2 - time1) / (1000 * 3600 * 24);
return Integer.parseInt(String.valueOf(between_days));
} catch (ParseException e) {
e.printStackTrace();
}
return 0;
} /**
* 计算time2比time1晚多少分钟,忽略日期部分
*
* @param time1
* @param time2
* @return
*/
public static int getMinuteDiffByTime(Date time1, Date time2) {
long startMil = 0;
long endMil = 0;
Calendar calendar = Calendar.getInstance();
calendar.setTime(time1);
calendar.set(1900, 1, 1);
startMil = calendar.getTimeInMillis();
calendar.setTime(time2);
calendar.set(1900, 1, 1);
endMil = calendar.getTimeInMillis();
return (int) ((endMil - startMil) / MILLIS_IN_A_SECOND / SECONDS_IN_A_MINUTE);
} /**
* 计算时间是否是同一天
*
* @param dateA
* @param dateB
* @return
*/
public static boolean areSameDay(Date dateA, Date dateB) {
Calendar calDateA = Calendar.getInstance();
calDateA.setTime(dateA); Calendar calDateB = Calendar.getInstance();
calDateB.setTime(dateB); return calDateA.get(Calendar.YEAR) == calDateB.get(Calendar.YEAR)
&& calDateA.get(Calendar.MONTH) == calDateB.get(Calendar.MONTH)
&& calDateA.get(Calendar.DAY_OF_MONTH) == calDateB.get(Calendar.DAY_OF_MONTH);
} /**
* @Title: getCurrYearLast
* @Description: 获取某年最后一天
* @param date
* @return Date
*/
public static Date getCurrYearLast(Date date) {
Calendar currCal = Calendar.getInstance();
currCal.setTime(date);
int currentYear = currCal.get(Calendar.YEAR);
return getYearLast(currentYear);
} private static Date getYearLast(int year) {
Calendar calendar = Calendar.getInstance();
calendar.clear();
calendar.set(Calendar.YEAR, year); calendar.roll(Calendar.DAY_OF_YEAR, -1);
// 将小时至0
calendar.set(Calendar.HOUR_OF_DAY, 23);
// 将分钟至0
calendar.set(Calendar.MINUTE, 59);
// 将秒至0
calendar.set(Calendar.SECOND, 59);
// 将毫秒至0
calendar.set(Calendar.MILLISECOND, 0); Date currYearLast = calendar.getTime();
return currYearLast;
}
/*
* private static Date getYearLast(int year) { Calendar calendar =
* Calendar.getInstance(); calendar.clear(); calendar.set(Calendar.YEAR,
* year); calendar.roll(Calendar.DAY_OF_YEAR, -1); Date currYearLast =
* calendar.getTime(); return currYearLast; }
*/
/**
*
* @param args
* @throws ParseException
*
* 根据结算周期数 对开始时间与结束时间进行分段
*/
public static void main(String[] args) throws ParseException {
/*开始时间*/
Date startDate = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse("2017-1-20 10:31:36");
/*结束时间*/
Date endDate = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse("2017-5-12 10:31:36");
/*周期数*/
int solt = 2;
ArrayList<Map<String, Object>> list = new ArrayList<>(); while (startDate.getTime()<endDate.getTime()) {
Map<String, Object> map = new HashMap<>();
map.put("开始时间",new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(startDate));
startDate=dateAfter(startDate, solt, Calendar.MONTH);
if (startDate.getTime()>endDate.getTime()) {
map.put("结束时间",new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(endDate)); } else {
map.put("结束时间",new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(startDate));
}
list.add(map);
}
System.out.println(list);
}
}
Java对日期Date类进行日期加减运算,年份加减,月份加减的更多相关文章
- java中的Date类
一.Date类简介 日期类主要包括Date类与Calendar类,这一节我们先介绍Date类, Date 表示特定的瞬间,精确到毫秒.Date类用于表示日期和时间,在计算机中的表示和我们现实世界使用差 ...
- Date类与日期格式
Date类概述: 表示特定的瞬间,精确到毫秒. Date()分配 Date 对象并初始化此对象,以表示分配它的时间(精确到毫秒).Date(long date)分配 Date 对象并初始化此对象,以表 ...
- Java基础教程——Date类和Calendar类
Date类和Calendar类都是关于日期的类,都在java.util包中,使用时需要import. Date java.util.Date类的对象用来表示时间和日期,用得最多的是获取系统当前日期和时 ...
- java基础系列--Date类
原创作品,可以转载,但是请标注出处地址:http://www.cnblogs.com/V1haoge/p/7126930.html 1.Date类概述 Date类是从JDK1.1就开始存在的老类,其提 ...
- java基础之Date类
Date类: Date类概述 类 Date 表示特定的瞬间,精确到毫秒. 构造方法 public Date() public Date(long date) 成员方法 public long getT ...
- Java 常用对象-Date类和Calender类
2017-11-02 22:29:34 Date类:类 Date 表示特定的瞬间,精确到毫秒. 在 JDK 1.1 之前,类 Date 有两个其他的函数.它允许把日期解释为年.月.日.小时.分钟和秒值 ...
- [Swift实际操作]七、常见概念-(6)日期Date和DateFormatter日期的格式化
本文将为你演示日期类型的使用,以及如何对日期进行格式化. 首先引入需要使用到的界面框架 import UIKit 初始化一个日期对象,它的值和当前电脑中的日期相同 var date = Date() ...
- JAVA基础之Date类、DateFormat类及Calendar类
个人理解: 关于Date类,进行截取或者转换时一定要注意好数据类型,long类型后面要加上L.时间的原点是1970年.用DateFormat则完成日期与文本之间的转换,特别注意的是:月是用M,时是用H ...
- Java对日期Date类进行加减运算,年份加减,月份加减
import java.text.SimpleDateFormat;import java.util.Calendar;import java.util.Date; public class Da ...
随机推荐
- php base64上传图片
php实现base64图片上传方式 本例子中没有采用File Post上传文件方式!原理一样,为了更加的理解base64 选择将其输出在文本域中,并提交至服务器!运用到项目中建议采用提交File方式. ...
- LibreOJ #6014. 「网络流 24 题」最长 k 可重区间集
#6014. 「网络流 24 题」最长 k 可重区间集 内存限制:256 MiB时间限制:1000 ms标准输入输出 题目类型:传统评测方式:文本比较 上传者: 匿名 提交提交记录统计讨论测试数据 ...
- docker安装radis
sudo docker search redis sudo docker pull redis sudo docker run --name redis6379 -p 6379:6379 -v /op ...
- [MACHINE LEARNING] Can we predict voting outcomes?
1. CART Tree library(rpart)library(rpart.plot)CTree = rpart(Party ~ . -USER_ID, data = train, method ...
- 2019.02.27 bzoj4556: [Tjoi2016&Heoi2016]字符串(二分答案+sam+线段树合并)
传送门 题意:给一个字符串SSS. 有mmm次询问,每次给四个参数a,b,c,da,b,c,da,b,c,d,问s[a...b]s[a...b]s[a...b]的所有子串和s[x...y]s[x... ...
- 学以致用二十八-----win10安装mysql5.7.24及卸载
1.在windows环境下安装mysql,需要下载相对应的版本. ------------------------> 这里我下载的是mysql-5.7.24-win64.zip 2.下载后解压, ...
- 过滤器(Filter)、拦截器(Interceptor)、监听器(Listener)
一.Filter 过滤器 1.简介 Filter也称之为过滤器,它是Servlet技术中最实用的技术,WEB开发人员通过Filter技术,对web服务器管理的所有web资源:例如Jsp, Servle ...
- elasticsearch搜索引擎环境的搭建
elasticsearch 搜索引擎 解决了什么问题:在我们数据量很大时,我们使用模糊查询会使索引列的索引消失,这样使用elasticsearch来提高查询效率. 存在什么问题:有时我们查询的词,el ...
- SSM_CRUD新手练习(8)搭建BootStrap分页页面
经过Spring单元测试模拟请求,我们能够成功的取出数据,接下来,我们就开始写用来显示查询数据的分页页面吧. 我们使用Bootstrap来帮助我们快速开发漂亮的页面,具体怎么用可以查看Bootst ...
- POJ2455 Secret Milking Machine
Secret Milking Machine Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 12324 Accepted ...