/**
*/
package com.jnwat.anbao.common.utils;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.*;
import org.apache.commons.lang.StringEscapeUtils;
import org.apache.commons.lang3.time.DateFormatUtils;
import org.joda.time.DateTime;
import org.joda.time.Period;
import org.joda.time.PeriodType;
/**
* 日期工具类, 继承org.apache.commons.lang.time.DateUtils类
* @author administrator
* @version 2014-4-15
*/
public class DateUtils extends org.apache.commons.lang3.time.DateUtils {
private static String[] parsePatterns = {
"yyyy-MM-dd", "yyyy-MM-dd HH:mm:ss", "yyyy-MM-dd HH:mm", "yyyy-MM",
"yyyy/MM/dd", "yyyy/MM/dd HH:mm:ss", "yyyy/MM/dd HH:mm", "yyyy/MM",
"yyyy.MM.dd", "yyyy.MM.dd HH:mm:ss", "yyyy.MM.dd HH:mm", "yyyy.MM"};
/**
* 得到当前日期字符串 格式(yyyy-MM-dd)
*/
public static String getDate() {
return getDate("yyyy-MM-dd");
}
/**
* 得到当前日期字符串 格式(yyyy-MM-dd) pattern可以为:"yyyy-MM-dd" "HH:mm:ss" "E"
*/
public static String getDate(String pattern) {
return DateFormatUtils.format(new Date(), pattern);
}
/**
* 得到日期字符串 默认格式(yyyy-MM-dd) pattern可以为:"yyyy-MM-dd" "HH:mm:ss" "E"
*/
public static String formatDate(Date date, Object... pattern) {
String formatDate = null;
if (pattern != null && pattern.length > 0) {
formatDate = DateFormatUtils.format(date, pattern[0].toString());
} else {
formatDate = DateFormatUtils.format(date, "yyyy-MM-dd");
}
return formatDate;
}
/**
* 得到日期时间字符串,转换格式(yyyy-MM-dd HH:mm:ss)
*/
public static String formatDateTime(Date date) {
return formatDate(date, "yyyy-MM-dd HH:mm:ss");
}
/**
* 得到当前时间字符串 格式(HH:mm:ss)
*/
public static String getTime() {
return formatDate(new Date(), "HH:mm:ss");
}
/**
* 得到当前日期和时间字符串 格式(yyyy-MM-dd HH:mm:ss)
*/
public static String getDateTime() {
return formatDate(new Date(), "yyyy-MM-dd HH:mm:ss");
}
/**
* 得到当前年份字符串 格式(yyyy)
*/
public static String getYear() {
return formatDate(new Date(), "yyyy");
}
/**
* 得到当前月份字符串 格式(MM)
*/
public static String getMonth() {
return formatDate(new Date(), "MM");
}
/**
* 得到当天字符串 格式(dd)
*/
public static String getDay() {
return formatDate(new Date(), "dd");
}
/**
* 得到当前星期字符串 格式(E)星期几
*/
public static String getWeek() {
return formatDate(new Date(), "E");
}
/**
* 日期型字符串转化为日期 格式
* { "yyyy-MM-dd", "yyyy-MM-dd HH:mm:ss", "yyyy-MM-dd HH:mm",
* "yyyy/MM/dd", "yyyy/MM/dd HH:mm:ss", "yyyy/MM/dd HH:mm",
* "yyyy.MM.dd", "yyyy.MM.dd HH:mm:ss", "yyyy.MM.dd HH:mm" }
*/
public static Date parseDate(Object str) {
if (str == null){
return null;
}
try {
return parseDate(str.toString(), parsePatterns);
} catch (ParseException e) {
return null;
}
}
/**
* 获取过去的天数
* @param date
* @return
*/
public static long pastDays(Date date) {
long t = new Date().getTime()-date.getTime();
return t/(24*60*60*1000);
}
/**
* 获取过去的小时
* @param date
* @return
*/
public static long pastHour(Date date) {
long t = new Date().getTime()-date.getTime();
return t/(60*60*1000);
}
/**
* 获取过去的分钟
* @param date
* @return
*/
public static long pastMinutes(Date date) {
long t = new Date().getTime()-date.getTime();
return t/(60*1000);
}
/**
* 转换为时间(天,时:分:秒.毫秒)
* @param timeMillis
* @return
*/
public static String formatDateTime(long timeMillis){
long day = timeMillis/(24*60*60*1000);
long hour = (timeMillis/(60*60*1000)-day*24);
long min = ((timeMillis/(60*1000))-day*24*60-hour*60);
long s = (timeMillis/1000-day*24*60*60-hour*60*60-min*60);
long sss = (timeMillis-day*24*60*60*1000-hour*60*60*1000-min*60*1000-s*1000);
return (day>0?day+",":"")+hour+":"+min+":"+s+"."+sss;
}
/**
* 获取两个日期之间的天数
*
* @param before
* @param after
* @return
*/
public static double getDistanceOfTwoDate(Date before, Date after) {
long beforeTime = before.getTime();
long afterTime = after.getTime();
return (afterTime - beforeTime) / (1000 * 60 * 60 * 24);
}
/**
* 两个日期相差的月数除以三取商
*/
public static int get3MonthNum(Date date1,Date date2) {
Calendar cal1=Calendar.getInstance();
cal1.setTime(date1);
Calendar cal2=Calendar.getInstance();
cal2.setTime(date2);
return ((cal2.get(1)-cal1.get(1))*12+(cal2.get(2)-cal1.get(2)))/3;
}
/**
* 两个日期相差的月数
*/
public static int getMonthNum(Date date1,Date date2) {
Calendar cal1=Calendar.getInstance();
cal1.setTime(date1);
Calendar cal2=Calendar.getInstance();
cal2.setTime(date2);
return (cal2.get(1)-cal1.get(1))*12+(cal2.get(2)-cal1.get(2));
}
/**
* 两个日期相差的月数除以六取商
*/
public static int get6MonthNum(Date date1,Date date2) {
Calendar cal1=Calendar.getInstance();
cal1.setTime(date1);
Calendar cal2=Calendar.getInstance();
cal2.setTime(date2);
return ((cal2.get(1)-cal1.get(1))*12+(cal2.get(2)-cal1.get(2)))/6;
}
/**
* 两个日期相差的月数除以12取商
*/
public static int get12MonthNum(Date date1,Date date2) {
Calendar cal1=Calendar.getInstance();
cal1.setTime(date1);
Calendar cal2=Calendar.getInstance();
cal2.setTime(date2);
return ((cal2.get(1)-cal1.get(1))*12+(cal2.get(2)-cal1.get(2)))/12;
}
/**
* 获取某个日期后几个月的日期
* @param date
* @param dateType
* @param month
* @return
* @throws ParseException
*/
public static Date addMonth(Date date,String dateType,int month) throws ParseException {
String nowDate = null;
SimpleDateFormat format = new SimpleDateFormat(dateType);
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
calendar.add(Calendar.MONTH, month);
nowDate = format.format(calendar.getTime());
return format.parse(nowDate);
}
public static String[] getDateStrBetweenTwoDate(Date startDate,Date endDate,String pattern){
try {
if(startDate == null || endDate == null){
return null;
}
SimpleDateFormat simpleDateFormat1 = new SimpleDateFormat("yyyy-MM-dd");
long startTime = simpleDateFormat1.parse(simpleDateFormat1.format(startDate)).getTime();
long endTime = simpleDateFormat1.parse(simpleDateFormat1.format(endDate)).getTime();
int days = (int)Math.ceil((endTime - startTime) / (1000 * 60 * 60 * 24))+1;
String[] result = new String[days];
SimpleDateFormat sdf = new SimpleDateFormat(pattern);
for(int i = 0;i<days;i++){
result[i] = sdf.format(new Date(startTime));
startTime += (1000 * 60 * 60 * 24);
}
return result;
}catch (Exception e){
e.printStackTrace();
return null;
}
}
/**
* @描述: 获取当前年份的12月15号
*
* @公司: 济南广域软件
* @author zhangpeng
* @param:
* @return
* @version 1.0
*/
public static Date getCurYear1215(){
Calendar cale = null;
cale = Calendar.getInstance();
cale.set(cale.get(Calendar.YEAR),11,15);
return cale.getTime();
}
/**
* @描述: 得到某个日期的前三个月日期
*
* @公司: 济南广域软件
* @author zhangpeng
* @param:
* @return
* @version 1.0
*/
public static Date getBefor3Month(Date date){
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
int year = calendar.get(calendar.YEAR);
int month = calendar.get(calendar.MONTH) + 1;
int day = calendar.get((calendar.DATE));
calendar.set(year,(month-4),day);
return calendar.getTime();
}
/**
* @描述: 获取某个日期半年后日期
*
* @公司: 济南广域软件
* @author zhangpeng
* @param:
* @return
* @version 1.0
*/
public static Date getAfter6Month(Date date){
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
int year = calendar.get(calendar.YEAR);
int month = calendar.get(calendar.MONTH) + 1;
int day = calendar.get((calendar.DATE));
calendar.set(year,(month+5),day);
return calendar.getTime();
}
/**
* @描述: 获取某个日期后一个月
*
* @公司: 济南广域软件
* @author zhangpeng
* @param:
* @return
* @version 1.0
*/
public static Date getAfter1Month(Date date){
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
int year = calendar.get(calendar.YEAR);
int month = calendar.get(calendar.MONTH) + 1;
int day = calendar.get((calendar.DATE));
calendar.set(year,(month),day);
return calendar.getTime();
}
/**
* @描述: 一周后
*
* @公司: 济南广域软件
* @author zhangpeng
* @param:
* @return
* @version 1.0
*/
public static Date getAfter7day(Date date){
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
int year = calendar.get(calendar.YEAR);
int month = calendar.get(calendar.MONTH);
int day = calendar.get((calendar.DATE)) + 7;
calendar.set(year,(month),day);
return calendar.getTime();
}
/**
* @描述: 获取当前时间的季度
*
* @公司: 济南广域软件
* @author zhangpeng
* @param:
* @return
* @version 1.0
*/
public static int getQuarter(Calendar c){
int quarter = 1;
Calendar c1 = Calendar.getInstance();
c1.set(c.get(Calendar.YEAR), Calendar.JANUARY, 1);
Calendar c3 = Calendar.getInstance();
c3.set(c.get(Calendar.YEAR), Calendar.MARCH, 31);
Calendar c4 = Calendar.getInstance();
c4.set(c.get(Calendar.YEAR), Calendar.APRIL, 1);
Calendar c6 = Calendar.getInstance();
c6.set(c.get(Calendar.YEAR), Calendar.JUNE, 30);
Calendar c7 = Calendar.getInstance();
c7.set(c.get(Calendar.YEAR), Calendar.JULY, 1);
Calendar c9 = Calendar.getInstance();
c9.set(c.get(Calendar.YEAR), Calendar.SEPTEMBER, 30);
Calendar c10 = Calendar.getInstance();
c10.set(c.get(Calendar.YEAR), Calendar.OCTOBER, 1);
if(c.compareTo(c1)>=0&&c.compareTo(c3)<=0){//一季度
quarter = 1;
}else if(c.compareTo(c4)>=0&&c.compareTo(c6)<=0){//二季度
quarter = 2;
}else if(c.compareTo(c7)>=0&&c.compareTo(c9)<=0){//三季度
quarter = 3;
}else{//四季度
quarter = 4;
}
return quarter;
}
/**
* @描述: 根据年与月获取月的开始时间与结束时间
*
* @公司: 济南广域软件
* @author zhangpeng
* @param: string string
* @return date
* @version 1.0
*/
public static Date[] getMonthSE(String year,String month) throws ParseException {
String dateStr = year + "-" + month + "-15";
Date[] arr = new Date[2];
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
Calendar c = Calendar.getInstance();
c.setTime(sdf.parse(dateStr));
c.set(Calendar.DAY_OF_MONTH, 1);
arr[0] =c.getTime();
c.set(Calendar.DAY_OF_MONTH, c.getActualMaximum(Calendar.DAY_OF_MONTH));
arr[1]=c.getTime();
return arr;
}
/**
* 获取某周得第一天
* @param year 年
* @param week 周
* @return
*/
public static Date getFirstDayOfWeek(int year, int week){
Calendar c = new GregorianCalendar();
c.set(Calendar.YEAR, year);
c.set(Calendar.WEEK_OF_YEAR, week);
c.setFirstDayOfWeek(Calendar.MONDAY);
c.set(Calendar.DAY_OF_WEEK, c.getFirstDayOfWeek());
c.set(Calendar.HOUR, 0);
c.set(Calendar.MINUTE, 0);
c.set(Calendar.SECOND, 0);
return c.getTime();
}
/**
* 获取某周得最后一天
* @param year 年
* @param week 周
* @return
*/
public static Date getLastDayOfWeek(int year, int week){
Calendar c = new GregorianCalendar();
c.set(Calendar.YEAR, year);
c.set(Calendar.WEEK_OF_YEAR, week);
c.setFirstDayOfWeek(Calendar.MONDAY);
c.set(Calendar.DAY_OF_WEEK, c.getFirstDayOfWeek() + 6);
c.set(Calendar.HOUR, 23);
c.set(Calendar.MINUTE, 59);
c.set(Calendar.SECOND, 59);
return c.getTime();
}
/**
* 获取某月得第一天
* @param year 年
* @param month 月
* @return
*/
public static Date getFirstDayOfMonth(int year, int month){
Calendar c = new GregorianCalendar();
c.set(year, month, 1);
c.set(Calendar.HOUR, 0);
c.set(Calendar.MINUTE, 0);
c.set(Calendar.SECOND, 0);
return c.getTime();
}
/**
* 获取某月得最后一天
* @param year 年
* @param month 月
* @return
*/
public static Date getLastDayOfMonth(int year, int month){
Calendar c = new GregorianCalendar();
c.set(year, month, 1);
c.roll(Calendar.DATE, -1);
c.set(Calendar.HOUR, 23);
c.set(Calendar.MINUTE, 59);
c.set(Calendar.SECOND, 59);
return c.getTime();
}
/**
* 获取某季度得第一天
* @param year 年
* @param quarter 季度
* @return
*/
public static Date getFirstDayOfQuarter(int year, int quarter){
Calendar c = new GregorianCalendar();
int month = 0;
switch (quarter) {
case 1:
month = 1-1;
break;
case 2:
month = 4-1;
break;
case 3:
month = 7-1;
break;
case 4:
month = 10-1;
break;
default:
month = c.get(Calendar.MONTH);
break;
}
return getFirstDayOfMonth(year, month);
}
/**
* 获取某季度得最一天
* @param year 年
* @param quarter 季度
* @return
*/
public static Date getLastDayOfQuarter(int year, int quarter){
Calendar c = new GregorianCalendar();
int month = 0;
switch (quarter) {
case 1:
month = 3-1;
break;
case 2:
month = 6-1;
break;
case 3:
month = 9-1;
break;
case 4:
month = 12-1;
break;
default:
month = c.get(Calendar.MONTH);
break;
}
return getLastDayOfMonth(year, month);
}
/**
* 获取某年得第一天
* @param year 年
* @return
*/
public static Date getFirstDayOfYear(int year){
return getFirstDayOfMonth(year, 0);
}
/**
* 获取某年得最后一天
* @param year 年
* @return
*/
public static Date getLastDayOfYear(int year){
return getLastDayOfMonth(year, 11);
}
/**
* 获取当前为年第几周
*/
public static int getWeekYear(){
Calendar calendar = Calendar.getInstance();
calendar.setFirstDayOfWeek(Calendar.MONDAY);
calendar.setTime(new Date());
int week = calendar.get(Calendar.WEEK_OF_YEAR);
return week;
}
public static void main(String[] args){
List<Date> list = null;
try {
list = getRangeSet_Q(new Date(),getAfter6Month(new Date()));
} catch (Exception e) {
e.printStackTrace();
}
System.out.println(list
.toString());
}
/**
* @描述: 获取当前月的开始日期与结束日期
*
* @公司: 济南广域软件
* @author zhangpeng
* @param:
* @return
* @version 1.0
*/
public static Date[] getFLDate(){
Calendar cale = null;
cale = Calendar.getInstance();
Date[] arr = new Date[2];
// 获取当月的第一天
cale = Calendar.getInstance();
cale.add(Calendar.MONTH, 0);
cale.set(Calendar.DAY_OF_MONTH, 1);
arr[0] = cale.getTime();
// 获取当月的最后一天
cale = Calendar.getInstance();
cale.add(Calendar.MONTH, 1);
cale.set(Calendar.DAY_OF_MONTH, 0);
arr[1] = cale.getTime();
System.out.println(arr[0] + "dddddddddd"+arr[1]);
return arr;
}
/**
*根据时间范围获得季度集
* @return
*/
public static List getRangeSet_Q(Date beginDate,Date endDate){
SimpleDateFormat sdf = null;
String[] numStr =null;
Integer Y = null;
Integer Q = null;
sdf = new SimpleDateFormat("yyyy-MM");
Calendar dd = Calendar.getInstance();//定义日期实例
dd.setTime(beginDate);//设置日期起始时间
List<Date> list = new ArrayList<Date>();
while(!dd.getTime().after(endDate)){//判断是否到结束日期
numStr= sdf.format(dd.getTime()).split("-",0);
Y = Integer.valueOf(numStr[0]);
Q = getQuarter(Integer.valueOf(numStr[1]));
Date date = getFirstDayOfQuarter(Y,Q);
list.add(date);
dd.add(Calendar.MONTH, 1);//进行当前日期月份加1
}
return removeDuplicate(list);
}
/**
* 根据月获得季度
* @param month 月
* @return 季度
*/
private static int getQuarter(int month) {
if(month == 1 || month == 2 || month == 3){
return 1;
}else if(month == 4 || month == 5 || month == 6){
return 2;
}else if(month == 7 || month == 8 || month == 9){
return 3;
}else{
return 4;
}
}
public static List removeDuplicate(List list) {
for ( int i = 0 ; i < list.size() - 1 ; i ++ ) {
for ( int j = list.size() - 1 ; j > i; j -- ) {
if (list.get(j).equals(list.get(i))) {
list.remove(j);
}
}
}
return list;
}
/**
*根据时间范围获得月份集
* @return
*/
public static List<Date> getRangeSet(Date beginDate,Date endDate){
List<Date> rangeSet =null;
rangeSet = new java.util.ArrayList<Date>();
Calendar dd = Calendar.getInstance();//定义日期实例
dd.setTime(beginDate);//设置日期起始时间
while(!dd.getTime().after(endDate)){//判断是否到结束日期
rangeSet.add(dd.getTime());
dd.add(Calendar.MONTH, 1);//进行当前日期月份加1
}
return rangeSet;
}
/**
* 获取某时间段内所有周的列表(开始时间)
* @param startDate
* @param endDate
* @return
*/
public static List<Date> getWeek1List(Date startDate,Date endDate) throws ParseException {
List<String> weekList = new ArrayList<>();
//转换成joda-time的对象
DateTime firstDay = new DateTime(startDate).dayOfWeek().withMinimumValue();
DateTime lastDay = new DateTime(endDate).dayOfWeek().withMaximumValue();
//计算两日期间的区间天数
Period p = new Period(firstDay, lastDay, PeriodType.days());
int days = p.getDays();
if (days > 0){
int weekLength = 7;
for(int i=0;i<days;i=i+weekLength){
String monDay = firstDay.plusDays(i).toString("yyyy-MM-dd");
weekList.add(monDay);
}
}
return stod(weekList);
}
/*
* 获取时间范围内每周的周一周三
*/
public static List<Date> getWeek2List(Date startDate,Date endDate) throws ParseException {
List<String> weekList = new ArrayList<>();
//转换成joda-time的对象
DateTime firstDay = new DateTime(startDate).dayOfWeek().withMinimumValue();
DateTime lastDay = new DateTime(endDate).dayOfWeek().withMaximumValue();
//计算两日期间的区间天数
Period p = new Period(firstDay, lastDay, PeriodType.days());
int days = p.getDays();
if (days > 0){
int weekLength = 7;
for(int i=0;i<days;i=i+weekLength){
String monDay = firstDay.plusDays(i).toString("yyyy-MM-dd");
String sunDay = firstDay.plusDays(i+2).toString("yyyy-MM-dd");
weekList.add(monDay);
weekList.add(sunDay);
}
}
return stod(weekList);
}
/*
* 获取时间范围内每周的周一周三
*/
public static List<Date> getWeek3List(Date startDate,Date endDate) throws ParseException {
List<String> weekList = new ArrayList<>();
//转换成joda-time的对象
DateTime firstDay = new DateTime(startDate).dayOfWeek().withMinimumValue();
DateTime lastDay = new DateTime(endDate).dayOfWeek().withMaximumValue();
//计算两日期间的区间天数
Period p = new Period(firstDay, lastDay, PeriodType.days());
int days = p.getDays();
if (days > 0){
int weekLength = 7;
for(int i=0;i<days;i=i+weekLength){
String monDay = firstDay.plusDays(i).toString("yyyy-MM-dd");
String sunDay = firstDay.plusDays(i+2).toString("yyyy-MM-dd");
String friDay = firstDay.plusDays(i+4).toString("yyyy-MM-dd");
weekList.add(monDay);
weekList.add(sunDay);
weekList.add(friDay);
}
}
return stod(weekList);
}
/*
* 获取时间范围内每周的周一周二周三周四周五
*/
public static List<Date> getWeek5List(Date startDate,Date endDate) throws ParseException {
List<String> weekList = new ArrayList<>();
//转换成joda-time的对象
DateTime firstDay = new DateTime(startDate).dayOfWeek().withMinimumValue();
DateTime lastDay = new DateTime(endDate).dayOfWeek().withMaximumValue();
//计算两日期间的区间天数
Period p = new Period(firstDay, lastDay, PeriodType.days());
int days = p.getDays();
if (days > 0){
int weekLength = 7;
for(int i=0;i<days;i=i+weekLength){
String monDay = firstDay.plusDays(i).toString("yyyy-MM-dd");
String tueDay = firstDay.plusDays(i+1).toString("yyyy-MM-dd");
String wedDay = firstDay.plusDays(i+2).toString("yyyy-MM-dd");
String thuDay = firstDay.plusDays(i+3).toString("yyyy-MM-dd");
String friDay = firstDay.plusDays(i+4).toString("yyyy-MM-dd");
weekList.add(monDay);
weekList.add(tueDay);
weekList.add(wedDay);
weekList.add(thuDay);
weekList.add(friDay);
}
}
return stod(weekList);
}
//将string转化成date
public static List<Date> stod(List<String> weekList) throws ParseException {
List<Date> dateL = new ArrayList<Date>();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
for(String i:weekList){
Date date =
sdf.parse(i);
dateL.add(date);
}
return dateL;
}
//根据时间范围获取每月一号与15号
public static List<Date> getRangeSet2(Date beginDate,Date endDate){
List<Date> rangeSet =null;
rangeSet = new java.util.ArrayList<Date>();
Calendar dd = Calendar.getInstance();//定义日期实例
dd.setTime(beginDate);//设置日期起始时间
while(!dd.getTime().after(endDate)){//判断是否到结束日期
rangeSet.add(dd.getTime());
dd.add(Calendar.DATE,14);
rangeSet.add(dd.getTime());
dd.add(Calendar.DATE,-14);
dd.add(Calendar.MONTH, 1);//进行当前日期月份加1
}
return rangeSet;
}
}