虽然有些不常用,但是万一用到了呢
public class DateTimeUtil {
public static final String YYYY_MM_DD = "yyyy-MM-dd";
public static final String YYYY_MM_DD_HH_MM_SS = "yyyy-MM-dd HH:mm:ss";
private static Logger logger = LoggerFactory.getLogger(DateTimeUtil.class);
private DateTimeUtil() {
}
/**
* 增加天数
*
* @version : Ver 1.0
* @author : <a href="mailto:[email protected]">sunxs</a>
* @date :2016-6-30 下午5:52:28
* @param oldDate
* @param day
* @return
*/
public static Date addDay(Date oldDate,int day){
DateTime dateTime = new DateTime(oldDate);
dateTime = dateTime.plusDays(day);
return dateTime.toDate();
}
/**
* 将日期型转换为指定格式的字符串
*
* @param date
* 日期
* @param format
* 格式
* @return
*/
public static String formatDate(Date date, String format) {
Preconditions.checkNotNull(date);
Preconditions.checkArgument(StringUtils.isNotBlank(format));
DateTime dateTime = new DateTime(date);
return dateTime.toString(format);
}
/**
* 将日期型转换为指定格式的字符串
*
* @param date
* 日期 默认format yyyy-MM-dd HH:mm:ss
* @return
*/
public static String formatDate(Date date) {
return formatDate(date,"yyyy-MM-dd HH:mm:ss");
}
/**
* 将日期型转换为指定格式的字符串
*
* @param date
* 日期 默认format yyyy-MM-dd
* @return
*/
public static String formatDateEndWithDay(Date date) {
return formatDate(date,"yyyy-MM-dd");
}
/**
* 将字符串转化成时间
* @param timeStr
* @param formatStr
* @return
*/
public static Date strToDate(String timeStr, String formatStr) throws Exception {
DateTimeFormatter format = DateTimeFormat.forPattern(formatStr);
DateTime dateTime = DateTime.parse(timeStr, format);
return dateTime.toDate();
}
/**
* 将字符串转化成时间,默认传入的时间格式为 yyyy-MM-dd HH:mm:ss
* @param timeStr
* @return
*/
public static Date strToDate (String timeStr) throws Exception {
if(StringUtils.isBlank(timeStr)){
timeStr = "1900-01-01 00:00:00";
}
return strToDate(timeStr, YYYY_MM_DD_HH_MM_SS);
}
/**
* 获取某个月的第一天
* @param date 时间
* @param pattern 格式
* @return
*/
public static String getFirstDayOfMonth(Date date, String pattern){
Calendar c = Calendar.getInstance();
c.setTime(date);
c.set(Calendar.DAY_OF_MONTH, c.getActualMinimum(Calendar.DAY_OF_MONTH));
return new DateTime(c).toString(pattern);
}
/**
* 获取该月的最后一天
* @param date
* @param pattern
* @return
*/
public static String getLastDayOfMonth(Date date, String pattern){
Calendar c = Calendar.getInstance();
c.setTime(date);
c.set(Calendar.DAY_OF_MONTH, c.getActualMaximum(Calendar.DAY_OF_MONTH));
return new DateTime(c).toString(pattern);
}
/**
* 计算两个日期的月份差值
* @param start
* @param end
* @return
*/
public static int getMonthMinusOfDate(Date start, Date end){
Calendar c = Calendar.getInstance();
c.setTime(start);
int num = c.get(Calendar.MONTH);
c.clear();
c.setTime(end);
return num-c.get(Calendar.MONTH);
}
/**
* 加/减分钟
* @param date
* @param i
* @return
*/
public static Date addMin(Date date,int i)
{
Calendar cal = Calendar.getInstance();
cal.setTime(date);
cal.set(Calendar.MINUTE, cal.get(Calendar.MINUTE) + i);
return cal.getTime();
}
/**
* 将秒差转化成时分
* @param second 秒 "6000"
* @return "1小时40分"
* http://blog.csdn.net/fuxiaohui/article/details/25505823
*/
public static String formatTimeBySecond(long second) {
long ms=second*1000;
Integer ss = 1000;
Integer mi = ss * 60;
Integer hh = mi * 60;
Integer dd = hh * 24;
Long day = ms / dd;
Long hour = (ms - day * dd) / hh;
Long minute = (ms - day * dd - hour * hh) / mi;
StringBuilder sb = new StringBuilder();
hour+=day*24;
sb.append(hour+"小时");
sb.append(minute+"分钟");
return sb.toString();
}
/**
* 将一个日期字符串转化成日期
*
* @param strDate
* String
* @return Date yyyy-mm-dd
*/
public static Date convertStringToDate(String strDate) {
Date date = null;
try {
SimpleDateFormat df = new SimpleDateFormat(YYYY_MM_DD);
date = df.parse(strDate);
} catch (Exception e) {
logger.error(e.getMessage(),e);
}
return date;
}
/**
* 返回某段时间内 每一天
*
* @param beginDateStr
* @param currEndDateStr
* @return
*/
public static List<String> getScopeDays(String beginDateStr, String currEndDateStr) {
Date beginDate = convertStringToDate(beginDateStr);
String endDateStr = getDayAfterSpecificDate(currEndDateStr, 1);
Date endDate = convertStringToDate(endDateStr);
List<String> dateList = new ArrayList<String>();
SimpleDateFormat sdf = new SimpleDateFormat(YYYY_MM_DD);
Date currentDate = setDate(beginDateStr);
if (currentDate.before(beginDate)) {
currentDate = beginDate;
}
String currentDateStr = sdf.format(currentDate);
while (currentDate.before(endDate)) {
dateList.add(currentDateStr);
currentDateStr = getDayAfterSpecificDate(currentDateStr, 1);
currentDate = convertStringToDate(currentDateStr);
}
return dateList;
}
/**
* 取得某个时间后n天,格式为yyyy-mm-dd
*
* @param strDate
* String
* @param day
* int
* @return yyyy-mm-dd
*/
public static String getDayAfterSpecificDate(String strDate, int day) {
Calendar c = convertDateStringToCalendar(strDate);
c.add(Calendar.DAY_OF_MONTH, day);
return convertDateToString(convertStringToDate(c.get(Calendar.YEAR) + "-" + (c.get(Calendar.MONTH) + 1) + "-" + c.get(Calendar.DATE)));
}
/**
* 将一个日期字符串转化成Calendar
*
* @param strDate
* String
* @return Calendar
*/
public static Calendar convertDateStringToCalendar(String strDate) {
Date date = convertStringToDate(strDate);
Calendar c = Calendar.getInstance();
c.setTime(date);
return c;
}
/**
* 将日期转化为字符串
*
* @param date
* @return
*/
public static String convertDateToString(Date date) {
SimpleDateFormat dateFormat = new SimpleDateFormat(YYYY_MM_DD);
return dateFormat.format(date);
}
/**
* 设置是某一天
* @param time
* @return
*/
public static Date setDate(String time) {
String[] timeArray = time.split("-");
String year = timeArray[0];
String month = timeArray[1];
String day = timeArray[2];
Calendar instance = Calendar.getInstance();
instance.set(Integer.parseInt(year),
Integer.parseInt(month) - 1,
Integer.parseInt(day));
return instance.getTime();
}
/** * 获取指定日期是星期几
* 参数为null时表示获取当前日期是星期几
* @param date
* @return
*/
public static String anotherWeekOfDate(Date date) {
String[] weekOfDays = {"周日", "周一", "周二", "周三", "周四", "周五", "周六"};
Calendar calendar = Calendar.getInstance();
if(date != null){
calendar.setTime(date);
}
int w = calendar.get(Calendar.DAY_OF_WEEK) - 1;
if (w < 0){
w = 0;
}
return weekOfDays[w];
}
public static Date convertStringToDate(String strDate, String fm) {
Date date = null;
try {
SimpleDateFormat df = new SimpleDateFormat(fm);
date = df.parse(strDate);
} catch (Exception e) {
logger.error(e.getMessage(), e);
}
return date;
}
/**
* 获得今日凌晨12点时间
* @return
*/
public static Date getTodayDate(){
Calendar calendar = Calendar.getInstance();
calendar.setTime(new Date());
calendar.set(Calendar.HOUR_OF_DAY, 0);
calendar.set(Calendar.MINUTE, 0);
calendar.set(Calendar.SECOND, 0);
return calendar.getTime();
}
/**
* 获得今日凌晨12点时间 字符串
* @return
*/
public static String getTodayDateString(){
return DateTimeUtil.formatDate(DateTimeUtil.getTodayDate(),"yyyy-MM-dd");
}
/**
* 获取过去第几天的日期
*
* @param past
* @return
*/
public static String getPastDate(int past) {
Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.DAY_OF_YEAR, calendar.get(Calendar.DAY_OF_YEAR) - past);
Date today = calendar.getTime();
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
return format.format(today);
}
/**
* 获取当月月1号0点0分0秒的时间
* @return
*/
public static String getNowFirstMonthDay() {
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Calendar calendar = Calendar.getInstance();
calendar.add(Calendar.MONTH, 0);
calendar.set(Calendar.DAY_OF_MONTH, 1);
//将小时至00
calendar.set(Calendar.HOUR_OF_DAY, 00);
//将分钟至00
calendar.set(Calendar.MINUTE, 00);
//将秒至00
calendar.set(Calendar.SECOND,00);
String newFirstDay = format.format(calendar.getTime());
return newFirstDay;
}
/**
* 获取上一个月1号0点0分0秒的时间
*/
public static String getBeforeFirstMonthDay(){
SimpleDateFormat format=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Calendar calendar=Calendar.getInstance();
calendar.add(Calendar.MONTH, -1);
calendar.set(Calendar.DAY_OF_MONTH, 1);
//将小时至00
calendar.set(Calendar.HOUR_OF_DAY, 00);
//将分钟至00
calendar.set(Calendar.MINUTE, 00);
//将秒至00
calendar.set(Calendar.SECOND,00);
String beforeFirstMonthDay = format.format(calendar.getTime());
return beforeFirstMonthDay;
}
/**
* 获取上一个月最后一天23点59分59秒的时间
*/
public static String getBeforeLastMonthDay() {
SimpleDateFormat sf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Calendar calendar=Calendar.getInstance();
int month=calendar.get(Calendar.MONTH);
calendar.set(Calendar.MONTH, month-1);
calendar.set(Calendar.DAY_OF_MONTH, calendar.getActualMaximum(Calendar.DAY_OF_MONTH));
//将小时至23
calendar.set(Calendar.HOUR_OF_DAY, 23);
//将分钟至59
calendar.set(Calendar.MINUTE, 59);
//将秒至59
calendar.set(Calendar.SECOND,59);
String beforeLastMonthDay = sf.format(calendar.getTime());
return beforeLastMonthDay;
}
/**
* 获取当前时间的上月时间 yyyy-MM-dd HH:mm:ss
*/
public static String getNowTimeBeforeMonthDay() {
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Calendar c = Calendar.getInstance();
c.setTime(new Date());
c.add(Calendar.MONTH, -1);
String newTimeBeforeMonthDay = format.format(c.getTime());
return newTimeBeforeMonthDay;
}
/**
* 获取某个月的天数
*/
public static Integer getDaysOfMonth(Date date) {
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
return calendar.getActualMaximum(Calendar.DAY_OF_MONTH);
}
/**
* 获取当前是本月第几天
*/
public static Integer getDayOfMonth() {
Calendar calendar = Calendar.getInstance();
int dayOfMonth = calendar.get(Calendar.DAY_OF_MONTH);
return dayOfMonth;
}
/**
* 获取上月总天数
*/
public static Integer getDaysOfMonth() {
Calendar calendar = Calendar.getInstance();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
String format = sdf.format(new Date());
try {
calendar.setTime(sdf.parse(format));
int thisMonth = calendar.get(Calendar.DAY_OF_MONTH);
calendar.add(Calendar.MONTH, -1);
return calendar.getActualMaximum(Calendar.DAY_OF_MONTH);
} catch (Exception e) {
logger.error("设置时间异常", e);
}
return 0;
}
}