java版本时间_Java日期工具类(基于JDK1.7版本)

public classDateUtil {private static final String yyyyMMddHHmmss = "yyyy-MM-dd HH:mm:ss";private static final String yyyyMMdd = "yyyy-MM-dd";private static final String HHmmdd = "HH:mm:ss";private static final String DAY = "day", MONTH = "month", YEAR = "year", WEEK = "week";private static final String HOUR = "hour", MINNUTE = "minute", SECOND = "second";/*** 日期正则表达式*/

public static final String YEAR_REGEX = "^\\d{4}$";public static final String MONTH_REGEX = "^\\d{4}(\\-|\\/|\\.)\\d{1,2}$";public static final String DATE_REGEX = "^\\d{4}(\\-|\\/|\\.)\\d{1,2}\\1\\d{1,2}$";/*** 将日期转换为指定格式的字符串

*

*@paramdate java.util.Date 日期(如果为NULL,则默认为当前时间)

*@paramformat 需要转换后得到的格式(例如:"yyyy-MM-dd HH:mm:ss"){@linkDateUtil#yyyyMMddHHmmss}

*@return

*/

public staticString getDateTimeStr(Date date, String format) {if (date == null) {

date= newDate();

}if (format == null ||format.isEmpty()) {

format=yyyyMMddHHmmss;

}return newSimpleDateFormat(format).format(date);

}/*** 日期字符串 → 日期(java.util.Date)

*

*@paramdateTimeStr 日期字符串(例如:"yyyy-MM-dd HH:mm:ss")

*@paramformat 转成日期的格式(注意:必须和日期字符串中的元素对应上){@linkDateUtil#yyyyMMddHHmmss}

*@return

*/

public staticDate getDateTime(String dateTimeStr, String format) {if (format == null ||format.isEmpty()) {

format=yyyyMMdd;

}

Date date= null;try{

date= newSimpleDateFormat(format).parse(dateTimeStr);

}catch(ParseException e) {

e.printStackTrace();

}returndate;

}/*** 获取指定日期所在月份的天数

*

*@paramdateStr 格式最低要求为:"yyyy-MM-dd"

*@return

*/

public staticString getDaysOfMonth(String dateStr) {return null;

}/*** 时间戳转化为北京时间日期格式

*

*@parampattern 如:yyyy-MM-dd HH:mm:ss 获取时间格式为: 年-月-日 时:分:秒

* pattern模式匹配语法:

* G 年代标志符

* y 年

* M 月

* d 日

* h 时 在上午或下午 (1~12)

* H 时 在一天中 (0~23)

* m 分

* s 秒

* S 毫秒

* E 星期

* D 一年中的第几天

* F 一月中第几个星期几

* w 一年中第几个星期

* W 一月中第几个星期

* a 上午 / 下午 标记符

* k 时 在一天中 (1~24)

* K 时 在上午或下午 (0~11)

* z 时区

*@paramtimestamp 时间戳

*@return

*/

public static String timestamp2DateTime(String pattern, longtimestamp) {//使用简体中文所在的时区

SimpleDateFormat format = newSimpleDateFormat(pattern, Locale.SIMPLIFIED_CHINESE);returnformat.format(timestamp);

}/*** 获取当前时间的时间戳,精确到秒。

*

*@return时间戳*/

public static longgetTimestamp() {return System.currentTimeMillis() / 1000;

}/*** 时间戳 → 指定格式的字符串

*

*@paramformat 格式

*@paramtimestamp 时间戳

*@return

*/

public static String getDateTime(String format, longtimestamp) {return newSimpleDateFormat(format).format(timestamp);

}/*** 判断日期是否为月底最后一天

*

*@paramdate 日期(java.util.Date)

*@returntrue:是 false:否*/

public static booleanisLastDayofMonth(Date date) {

Calendar calendar=Calendar.getInstance();

Calendar last=Calendar.getInstance();

calendar.setTime(date);

last.set(Calendar.DAY_OF_MONTH, last.getActualMaximum(Calendar.DAY_OF_MONTH));//1. 此方法时间精确到秒

/*if (calendar.compareTo(last) == 0) {

return true;

}*/

//2. 获取当月最大天数与当前日期比较

String start =getDateTimeStr(date, yyyyMMdd);

String day= start.split("-")[2];int days = calendar.getActualMaximum(Calendar.DAY_OF_MONTH); //当月最大天数

if (days ==Integer.parseInt(day)) {return true;

}return false;

}/*** 计算两时间相距多少天

*

*@paramstartDate 开始时间(最低格式要求:"yyyy-MM-dd")

*@paramendDate 结束时间(最低格式要求:"yyyy-MM-dd")

*@return正数:开始时间>结束时间;
负数:开始时间 < 结束时间
0:①起止时间相同;②传入的起止时间为NULL或空字符*/

public staticInteger calDateApart(String startDate, String endDate) {

startDate= startDate == null || startDate.isEmpty() ? getDateTimeStr(null, yyyyMMdd) : startDate;

endDate= endDate == null || endDate.isEmpty() ? getDateTimeStr(null, yyyyMMdd) : endDate;

DateFormat df= newSimpleDateFormat(yyyyMMdd);

Date d1= new Date(), d2 = newDate();try{

d1=df.parse(startDate);

d2=df.parse(endDate);

}catch(ParseException e) {

e.printStackTrace();

}

Calendar start=Calendar.getInstance();

start.setTime(d1);

Long startTime=start.getTimeInMillis();

Calendar end=Calendar.getInstance();

end.setTime(d2);

Long endTime=end.getTimeInMillis();

Long oneDay= 1000 * 60 * 60 * 24l, days = (endTime - startTime) /oneDay;int day =Integer.parseInt(String.valueOf(days));returnday;

}/*** 取得新的日期

*

*@paramdate 日期

*@paramdays 天数

*@return新的日期*/

public static Date addDays(Date date, longdays) {

Calendar cal=Calendar.getInstance();

cal.setTime(date);

cal.add(Calendar.DATE, (int) days);returncal.getTime();

}/*** 比较两个时间大小(注意:两个日期中任意一个传入了NULL都会返回 0 )

*

*@paramdate1 第一个时间

*@paramdate2 第二个时间

*@return-1:date1 > date2
1:date1 < date2;
0:date1 = date2 或 两者任一个中传入了NULL*/

public static intcompareDay(Date date1, Date date2) {if (date1 == null || date2 == null) {return 0;

}long a = date1.getTime(), b =date2.getTime();return a < b ? 1 : (a > b ? -1 : 0);

}public static booleanisBefore(Date date1, Date date2) {long a = date1.getTime(), b =date2.getTime();if (a

}return false;

}/*** 得到两个时间差 格式yyyy-MM-dd HH:mm:ss

*

*@paramstart 2019-06-27 14:12:40

*@paramend 2019-08-27 14:12:40

*@return5270400000*/

public static longdateSubtraction(String start, String end) {

SimpleDateFormat df= newSimpleDateFormat(yyyyMMddHHmmss);try{

Date date1= df.parse(start), date2 =df.parse(end);return date2.getTime() -date1.getTime();

}catch(ParseException e) {

e.printStackTrace();return 0;

}

}/*** 获取当前日期是一个星期的第几天(注意:星期一为第一天,周日为最后一天)

*

*@paramdate 日期(java.util.Date)

*@return2*/

public static intgetDayOfWeek(Date date) {

Calendar cal=Calendar.getInstance();

cal.setTime(date);return cal.get(Calendar.DAY_OF_WEEK) - 1;

}/*** 判断指定时间是否在[startTime, endTime]区间(注意:时间格式要一致)

*

*@paramnowTime 指定时间

*@paramdateSection 时间区间 2020-01-08,2020-09-09

*@returntrue:是,false: 否*/

public static booleanisEffectiveDate(Date nowTime, String dateSection) {try{

String[] times= dateSection.split(",");

Date startTime= new SimpleDateFormat(yyyyMMdd).parse(times[0]);

Date endTime= new SimpleDateFormat(yyyyMMdd).parse(times[1]);if (nowTime.getTime() ==startTime.getTime()|| nowTime.getTime() ==endTime.getTime()) {return true;

}

Calendar date=Calendar.getInstance();

date.setTime(nowTime);

Calendar begin=Calendar.getInstance();

begin.setTime(startTime);

Calendar end=Calendar.getInstance();

end.setTime(endTime);if (isSameDay(date, begin) ||isSameDay(date, end)) {return true;

}if (date.after(begin) &&date.before(end)) {return true;

}else{return false;

}

}catch(Exception e) {

e.printStackTrace();return false;

}

}public static booleanisSameDay(Calendar cal1, Calendar cal2) {if (cal1 != null && cal2 != null) {return cal1.get(0) == cal2.get(0) && cal1.get(1) == cal2.get(1) && cal1.get(6) == cal2.get(6);

}else{throw new IllegalArgumentException("The date must not be null");

}

}/*** 获取指定日期前后N个周期

*

*@paramdate 指定日期

*@paramperiod 周期(限定周期: 天"day",月"month",年"year",周"week")

*@paramcount N (正数:前多少个周期;
负数:后多少个周期的时间)

*@return2019-08-26*/

public static String getDatePeriod(Date date, String period, intcount) {

Calendar calendar=Calendar.getInstance();

calendar.setTime(date);if(YEAR.equals(period)) {

calendar.add(Calendar.YEAR, count);

}else if(MONTH.equals(period)) {

calendar.add(Calendar.MONTH, count);

}else if(WEEK.equals(period)) {

calendar.add(Calendar.WEEK_OF_MONTH, count);

}else{

calendar.add(Calendar.DAY_OF_MONTH, count);

}

date=calendar.getTime();return newSimpleDateFormat(yyyyMMdd).format(date);

}/*** 获取最近七天(之前的七天)

*

*@return2019-08-20*/

public staticString getServen() {

SimpleDateFormat sdf= newSimpleDateFormat(yyyyMMdd);

Calendar c=Calendar.getInstance();

c.add(Calendar.DATE,-7);

Date monday=c.getTime();

String preMonday=sdf.format(monday);returnpreMonday;

}/*** 获取最近的一个月(之前的一个月)

*

*@return

*/

public staticString getPreOneMonth() {

Calendar c=Calendar.getInstance();

c.add(Calendar.MONTH,-1);return newSimpleDateFormat(yyyyMMdd).format(c.getTime());

}/****

* 获取月末最后一天

*

*@paramsDate 2014-11-24

*@return30或31或28或29*/

private staticString getMonthMaxDay(String sDate) {

Calendar cal=Calendar.getInstance();

Date date= null;try{

date= new SimpleDateFormat(yyyyMMdd).parse(sDate + "-01");

}catch(ParseException e) {

e.printStackTrace();

}

cal.setTime(date);int last =cal.getActualMaximum(Calendar.DATE);returnString.valueOf(last);

}/*** 日期范围 - 切片

*

 
 

* -- eg:

* 年 ----------------------- sliceUpDateRange("2018", "2020");

* rs: [2018, 2019, 2020]

*

* 月 ----------------------- sliceUpDateRange("2018-06", "2018-08");

* rs: [2018-06, 2018-07, 2018-08]

*

* 日 ----------------------- sliceUpDateRange("2018-06-30", "2018-07-02");

* rs: [2018-06-30, 2018-07-01, 2018-07-02]

*

*

*@paramstartDate 起始日期

*@paramendDate 结束日期

*@return切片日期*/

public static ListsliceUpDateRange(String startDate, String endDate) {

List rs = new ArrayList<>();try{int dt =Calendar.DATE;

String pattern= "yyyy-MM-dd";if(startDate.matches(YEAR_REGEX)) {

pattern= "yyyy";

dt=Calendar.YEAR;

}else if(startDate.matches(MONTH_REGEX)) {

pattern= "yyyy-MM";

dt=Calendar.MONTH;

}else if(startDate.matches(DATE_REGEX)) {

pattern= "yyyy-MM-dd";

dt=Calendar.DATE;

}

Calendar sc= Calendar.getInstance(), ec =Calendar.getInstance();

sc.setTime(getDateTime(startDate, pattern));

ec.setTime(getDateTime(endDate, pattern));while (sc.compareTo(ec) < 1) {

rs.add(getDateTimeStr(sc.getTime(), pattern));

sc.add(dt,1);

}

}catch(Exception e) {

e.printStackTrace();

}returnrs;

}/*** 获得本周的最后一天,周日

*

*@return

*/

public staticDate getCurrentWeekDayEndTime() {

Calendar c=Calendar.getInstance();try{int weekday = c.get(Calendar.DAY_OF_WEEK) - 1;if (weekday == 0) {

weekday= 7;

}

c.add(Calendar.DATE,-weekday + 7);

c.setTime(new SimpleDateFormat().parse(new SimpleDateFormat().format(c.getTime()) + " 23:59:59"));

}catch(Exception e) {

e.printStackTrace();

}returnc.getTime();

}/*** 获得本周的第一天(即周一)

*

*@return

*/

public staticDate getCurrentWeekDayStartTime() {

Calendar c=Calendar.getInstance();try{int weekday = c.get(Calendar.DAY_OF_WEEK) - 1;if (weekday == 0) {

weekday= 7;

}

c.add(Calendar.DATE,-weekday + 1);

c.setTime(new SimpleDateFormat().parse(new SimpleDateFormat().format(c.getTime()) + " 00:00:00"));

}catch(Exception e) {

e.printStackTrace();

}returnc.getTime();

}/*** 获得指定日期所在日的开始时间

*

*@return

*/

public staticString getCurrentDayStartTime(Date date) {

String result= (date == null)? newSimpleDateFormat(yyyyMMdd).format(System.currentTimeMillis())

: getDateTimeStr(date, yyyyMMdd);return result.concat(" 00:00:00");

}/*** 获得指定日期所在日的结束时间

*

*@return

*/

public staticString getCurrentDayEndTime(Date date) {

String result= (date == null)? newSimpleDateFormat(yyyyMMdd).format(System.currentTimeMillis())

: getDateTimeStr(date, yyyyMMdd);return result.concat(" 23:59:59");

}/*** 根据日期范围,得到按周期划分的日期区间值

*

*@paramdateRange 格式最低要求有年月日,例如:"2020-01-01,2020-03-31"

*@paramperiod 周期(日"day",月"month",年"year")

*@return小区间集合*/

public static ListgetPeriodDateList(String dateRange, String period) {

String startDate= dateRange.trim().split(",")[0], endDate = dateRange.trim().split(",")[1];

Date start= getDateTime(startDate, yyyyMMdd), end =getDateTime(endDate, yyyyMMdd);

List result = new ArrayList<>();if(DAY.equals(period)) {

Calendar calendar=Calendar.getInstance();

calendar.setTime(start);while (start.before(end) ||start.equals(end)) {

result.add(newSimpleDateFormat(yyyyMMdd).format(calendar.getTimeInMillis()));//calendar.getTimeInMillis();//String startTmp = getCurrentDayStartTime(start), endTmp = getCurrentDayEndTime(start);//result.add(startTmp.concat(",").concat(endTmp));

calendar.add(Calendar.DATE, 1);

start=calendar.getTime();

}

}else if(MONTH.equals(period)) {

Calendar calendar=Calendar.getInstance();

calendar.setTime(start);while (start.before(end) ||start.equals(end)) {

result.add(new SimpleDateFormat("yyyy-MM").format(calendar.getTimeInMillis()));

calendar.add(Calendar.MONTH,1);

start=calendar.getTime();

}

}else if(YEAR.equals(period)) {

Calendar calendar=Calendar.getInstance();

calendar.setTime(start);while (start.before(end) ||start.equals(end)) {

result.add(new SimpleDateFormat("yyyy").format(calendar.getTimeInMillis()));

calendar.add(Calendar.YEAR,1);

start=calendar.getTime();

}

}returnresult;

}/*** 获取指定日期前后count天的集合

*

*@paramdate 指定日期

*@paramcount 多少天(正数:之后;负数:之前)

*@return前/后日期的集合(包含指定日期)*/

public static List getDayList(Date date, intcount) {

List result = new ArrayList<>();

Calendar c=Calendar.getInstance();

c.setTime(date);boolean flag = false;if (count < 0) {

count=Math.abs(count);

flag= true;

}for (int i = 0; i < count; i++) {

result.add(newSimpleDateFormat(yyyyMMdd).format(c.getTimeInMillis()));

c.add(Calendar.DATE, flag? -1 : 1);

}if(flag){

Collections.reverse(result);

}returnresult;

}public static voidmain(String[] args) {//Date date = new Date(), dateDemo = getDateTime("2020-01-30 23:33:21", yyyyMMddHHmmss);//String dateStr = "2020-02-01", timeStr = "23:33:21", dateTimeStr = "2020-01-30 23:33:21";//String dateStr2 = "2020-01-31", timeStr2 = "23:33:21", dateTimeStr2 = "2020-01-30 23:33:21";//String dateRange = "2020-01-01,2020-02-05";

System.out.println(getDayList(new Date(), -7));//System.out.println(getPeriodDateList(dateRange, DAY));//System.out.println(getCurrentDayStartTime(dateDemo));//System.out.println(getCurrentDayEndTime(dateDemo));//System.out.println(getDateTimeStr(getCurrentWeekDayStartTime(), yyyyMMdd));//System.out.println(getDateTimeStr(getCurrentWeekDayEndTime(), yyyyMMdd));//System.out.println(sliceUpDateRange(dateRange.trim().split(",")[0], dateRange.trim().split(",")[1]));//System.out.println(getPeriodDateList(dateRange, DAY));//System.out.println(getDateTimeStr(null, "hh mm ss"));//System.out.println(getDateTime(dateTimeStr, yyyyMMddHHmmss));//System.out.println(getTimestamp());//System.out.println(getDateTime(yyyyMMdd, System.currentTimeMillis()));//System.out.println(timestamp2DateTime(yyyyMMddHHmmss, System.currentTimeMillis()));//System.out.println(isLastDayofMonth(getDateTime(dateStr, yyyyMMdd)));//System.out.println(calDateApart(dateStr, dateStr));//System.out.println(compareDay(getDateTime(dateStr, yyyyMMdd), getDateTime(dateStr2, yyyyMMdd)));//System.out.println(getDateTimeStr(addDays(date, 3), yyyyMMdd));//System.out.println(dateSubtraction(dateTimeStr, dateTimeStr2));//System.out.println(getDayOfWeek(date));//System.out.println(isEffectiveDate(getDateTime(dateTimeStr, yyyyMMdd), dateStr.concat(",").concat(dateStr2)));//System.out.println(getDatePeriod(date, WEEK, -4));//System.out.println(getServen());//System.out.println(getPreOneMonth());//System.out.println(getMonthMaxDay(dateStr));

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值