可以实现的方法有:
在date上增加days天,在date上减去days天,在date上增加hours小时,分钟,年,月,把date转化为指定pattern的字符串,获取指定时期带星期字符串,根据日期获取星期,据日期获取星期编号星期一到星期七 1-7,获取两个日期之间的所有日期,是否今天,判断字符串是否为日期字符串
package com.lbonline.tms.util;
import org.apache.commons.lang3.StringUtils;
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.*;
/**
* @author wangtengfei
* @date 17/12/19
*/
public class DateUtils {
private DateUtils(){}
/**
* 时间原点:2010-01-01 00:00:00 UTC
*/
public static final long TIME_ORIGIN = 1262275200000L;
public static final String YMD = "yyyy-MM-dd";
public static final String YYYYMMDD = "yyyyMMdd";
public static final String MD = "MMdd";
public static final String HM = "HH:mm";
public static final String YM = "yyyy-MM";
public static final String D = "dd";
public static final String YMDHms = "yyyy-MM-dd HH:mm:ss";
public static final String DATE_WEEK_STR = "yyyy-MM-dd HH:mm";
public static final String YMDHm = "yyyy-MM-dd HH:mm";
public static final String MDHm = "MM-dd HH:mm";
public static final String LAST_SECONDS = " 23:59:59";
public static final String FIRST_SECONDS = " 00:00:00";
public static final String[] WEEK = new String[]{"星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六"};
/***
* 在date上增加days天
* @param date
* @param days
* @return
*/
public static Date
addDays(Date date, int days) {
return org.apache.commons.lang3.time.DateUtils.addDays(date, days);
}
/***
* 在date上减去days天
* @param date
* @param days
* @return
*/
public static Date subDays(Date date, int days) {
Calendar cal = Calendar.getInstance();//使用默认时区和语言环境获得一个日历。
cal.add(Calendar.DAY_OF_MONTH, -days);//取当前日期的前一天.
return cal.getTime();
}
/**
* 在此日期上减去相应的天数-ljm
* @param date
* @param days
* @return
*/
public static Date realSubDays(Date date, int days) {
Calendar cal = Calendar.getInstance();//使用默认时区和语言环境获得一个日历。
cal.setTime(date);
cal.add(Calendar.DATE, -days);//取当前日期的前一天.
return cal.getTime();
}
public static void main(String[] asg){
/* SimpleDateFormat simpleDateFormat = current SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date parse = DateUtils.parse(DateUtils.format(DateUtils.subDays(current Date(), 0), DateUtils.YMD) + DateUtils.FIRST_SECONDS, DateUtils.YMDHms);
System.out.println(simpleDateFormat.format(parse));*/
// System.out.println(30/4);
System.out.println(getDays("2018-09-26","2018-09-30"));
}
/***
* 在date上增加hours小时
* @param date
* @param hours
* @return
*/
public static Date addHours(Date date, int hours) {
return org.apache.commons.lang3.time.DateUtils.addHours(date, hours);
}
public static Date addMinutes(Date date, int minutes) {
return org.apache.commons.lang3.time.DateUtils.addMinutes(date, minutes);
}
public static Date addMonth(Date date, int month) {
if (date == null) {
return null;
}
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
calendar.set(Calendar.MONTH, calendar.get(Calendar.MONTH) + month);
return calendar.getTime();
}
public static Date addYear(Date date, int year) {
if (date == null) {
return null;
}
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
calendar.set(Calendar.YEAR, calendar.get(Calendar.YEAR) + year);
return calendar.getTime();
}
public static Date getNow() {
return new Date();
}
/**
* @func 把date转化为指定pattern的字符串
* @date 2013-5-28
* @version 1.2.20
*/
public static String format(Date date, String pattern) {
if (date == null) {
return null;
}
if (StringUtils.isBlank(pattern)) {
pattern = YMD;
}
DateFormat df = new SimpleDateFormat(pattern);
return df.format(date);
}
/**
* 获取指定时期带星期字符串
* @param date
* @return
*/
public static String getDateWeekTime(Date date){
//星期几自己判断,不直接取系统时间
if (date == null)
return null;
String week = getWeekOfDate(date);
SimpleDateFormat dt1 = new SimpleDateFormat(DATE_WEEK_STR);
String time = dt1.format(date);
if (StringUtils.isNotEmpty(time)){
String [] array = time.split(" ");
return array[0]+" ("+week+") "+array[1];
}
return null;
}
public static Date parse(String dateStr, String pattern) {
if (StringUtils.isBlank(dateStr)) {
return null;
}
if (StringUtils.isBlank(pattern)) {
pattern = YMD;
}
DateFormat df = new SimpleDateFormat(pattern);
try {
Date date = df.parse(dateStr);
return date;
} catch (Exception e) {
return null;
}
}
/**
* 根据日期获取星期
* @param date
* @return
*/
public static String getWeek(Date date){
if (date == null) return null;
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
int dayOfWeek = calendar.get(Calendar.DAY_OF_WEEK) - 1;
return WEEK[dayOfWeek];
}
/**
*根据日期获取星期编号星期一到星期七 1-7
* @param date
* @return 具体数字
*/
public static int getWeekNum(Date date){
if (date == null) return -1;
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
int dayOfWeek = calendar.get(Calendar.DAY_OF_WEEK) - 1;
return dayOfWeek==0?7:dayOfWeek;
}
/**
* 判断第一周上几个课时
* @param rate
* @param classHour
* @return
*/
public static int firstWeekNum(String rate,String classHour){
//获得当前日期是周几
int weekNum = getWeekNum(parse(classHour, YMD));
//获取上课频率
String[] rates = rate.split(",");
int min = Math.min(Integer.parseInt(rates[0]), Integer.parseInt(rates[1]));
int max = Math.max(Integer.parseInt(rates[0]), Integer.parseInt(rates[1]));
if (weekNum<=min) {
return 2;
}else if(min getDays(String startTime, String endTime) {
// 返回的日期集合
List days = new ArrayList();
DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
try {
Date start = dateFormat.parse(startTime);
Date end = dateFormat.parse(endTime);
Calendar tempStart = Calendar.getInstance();
tempStart.setTime(start);
Calendar tempEnd = Calendar.getInstance();
tempEnd.setTime(end);
tempEnd.add(Calendar.DATE, +1);// 日期加1(包含结束)
while (tempStart.before(tempEnd)) {
days.add(dateFormat.format(tempStart.getTime()));
tempStart.add(Calendar.DAY_OF_YEAR, 1);
}
} catch (ParseException e) {
e.printStackTrace();
}
return days;
}
/***
* 是否今天
* @param date
* @return
*/
public static boolean isToday(Date date){
SimpleDateFormat fmt=new SimpleDateFormat("yyyy-MM-dd");
return fmt.format(date).toString().equals(fmt.format(new Date()).toString());//格式化为相同格式
}
public static boolean isBeforeDate(Date date){
Date nowDate = new Date();
String dateStr = format(nowDate, "yyyy-MM-dd");
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd",
Locale.CHINA);
try {
Date now = sdf.parse(dateStr);
return now.compareTo(date) > 0;
} catch (ParseException e) {
e.printStackTrace();
return true;
}
}
/**
* 获取当前日期是星期几
*
* @param dt
* @return 当前日期是星期几
*/
public static String getWeekOfDate(Date dt) {
String[] weekDays = {"星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六"};
Calendar cal = Calendar.getInstance();
cal.setTime(dt);
int w = cal.get(Calendar.DAY_OF_WEEK) - 1;
if (w < 0)
w = 0;
return weekDays[w];
}
/**
* //获取前月的第一天
*
* @param date
* @return
*/
public static Date getFirstForMonth(Date date) {
Calendar calendar = Calendar.getInstance();//获取当前日期
calendar.setTime(date);
calendar.set(Calendar.DAY_OF_MONTH, 1);//设置为1号,当前日期既为本月第一天
calendar.set(Calendar.HOUR_OF_DAY, 0);
calendar.set(Calendar.MINUTE, 0);
calendar.set(Calendar.SECOND, 0);
calendar.set(Calendar.MILLISECOND, 0);
return calendar.getTime();
}
/**
* 获取最后一天的59分59秒
* @param date
* @return
*/
public static Date getLastForMonth(Date date){
Calendar calendar = Calendar.getInstance();//获取当前日期
calendar.setTime(date);
calendar.set(Calendar.DAY_OF_MONTH, calendar.getActualMaximum(Calendar.DAY_OF_MONTH));
calendar.set(Calendar.HOUR_OF_DAY, 23);
calendar.set(Calendar.MINUTE, 59);
calendar.set(Calendar.SECOND, 59);
calendar.set(Calendar.MILLISECOND, 0);
return calendar.getTime();
}
/**
* 判断字符串是否为日期字符串
* @param date
* @param format
* @return
*/
public static boolean checkStringIsDate(String date,String format){
SimpleDateFormat sd = new SimpleDateFormat(format);
sd.setLenient(false);
try
{
sd.parse(date);
return true;
}
catch (Exception e)
{
// 如果throw java.text.ParseException或者NullPointerException,就说明格式不对
return false;
}
}
}