概述
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));
}
最后
以上就是细腻樱桃为你收集整理的java版本时间_Java日期工具类(基于JDK1.7版本)的全部内容,希望文章能够帮你解决java版本时间_Java日期工具类(基于JDK1.7版本)所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复