/**
|
* Copyright (c) 2015-2016, Chill Zhuang 庄骞 (smallchill@163.com).
|
* <p>
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
* you may not use this file except in compliance with the License.
|
* You may obtain a copy of the License at
|
* <p>
|
* http://www.apache.org/licenses/LICENSE-2.0
|
* <p>
|
* Unless required by applicable law or agreed to in writing, software
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
* See the License for the specific language governing permissions and
|
* limitations under the License.
|
*/
|
package com.sinata.core.util;
|
|
import org.apache.commons.lang3.StringUtils;
|
import org.apache.commons.lang3.time.DateFormatUtils;
|
import org.apache.commons.lang3.time.DateUtils;
|
|
import java.sql.Timestamp;
|
import java.text.DateFormat;
|
import java.text.ParseException;
|
import java.text.SimpleDateFormat;
|
import java.util.Calendar;
|
import java.util.Date;
|
|
public class DateUtils2 {
|
|
/**
|
* 获取YYYY格式
|
*/
|
public static String getYear() {
|
return formatDate(new Date(), "yyyy");
|
}
|
|
/**
|
* 获取YYYY格式
|
*/
|
public static String getYear(Date date) {
|
return formatDate(date, "yyyy");
|
}
|
|
/**
|
* 获取YYYY-MM-DD格式
|
*/
|
public static String getDay() {
|
return formatDate(new Date(), "yyyy-MM-dd");
|
}
|
|
/**
|
* 获取YYYY-MM-DD格式
|
*/
|
public static String getDay(Date date) {
|
return formatDate(date, "yyyy-MM-dd");
|
}
|
|
/**
|
* 获取YYYYMMDD格式
|
*/
|
public static String getDays() {
|
return formatDate(new Date(), "yyyyMMdd");
|
}
|
|
/**
|
* 获取YYYYMMDD格式
|
*/
|
public static String getDays(Date date) {
|
return formatDate(date, "yyyyMMdd");
|
}
|
|
/**
|
* 获取YYYY-MM-DD HH:mm:ss格式
|
*/
|
public static String getTime() {
|
return formatDate(new Date(), "yyyy-MM-dd HH:mm:ss");
|
}
|
|
/**
|
* 获取YYYY-MM-DD HH:mm:ss.SSS格式
|
*/
|
public static String getMsTime() {
|
return formatDate(new Date(), "yyyy-MM-dd HH:mm:ss.SSS");
|
}
|
|
/**
|
* 获取YYYYMMDDHHmmss格式
|
*/
|
public static String getAllTime() {
|
return formatDate(new Date(), "yyyyMMddHHmmss");
|
}
|
|
/**
|
* 获取YYYY-MM-DD HH:mm:ss格式
|
*/
|
public static String getTime(Date date) {
|
return formatDate(date, "yyyy-MM-dd HH:mm:ss");
|
}
|
|
public static String formatDate(Date date, String pattern) {
|
String formatDate = null;
|
if (StringUtils.isNotBlank(pattern)) {
|
formatDate = DateFormatUtils.format(date, pattern);
|
} else {
|
formatDate = DateFormatUtils.format(date, "yyyy-MM-dd");
|
}
|
return formatDate;
|
}
|
|
/**
|
* 时间格式字符串,转为时间格式字符串
|
*/
|
public static String formatDate(String dateStr, String pattern) {
|
try {
|
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
|
return DateFormatUtils.format(sdf.parse(dateStr), pattern);
|
} catch (ParseException e) {
|
e.printStackTrace();
|
}
|
return null;
|
}
|
|
/**
|
* 日期比较,如果s>=e 返回true 否则返回false)
|
*
|
* @author luguosui
|
*/
|
public static boolean compareDate(String s, String e) {
|
if (parseDate(s) == null || parseDate(e) == null) {
|
return false;
|
}
|
return parseDate(s).getTime() >= parseDate(e).getTime();
|
}
|
|
/**
|
* 格式化日期
|
*/
|
public static Date parseDate(String date) {
|
return parse(date, "yyyy-MM-dd");
|
}
|
|
/**
|
* 格式化日期
|
*/
|
public static Date parseTimeMinutes(String date) {
|
return parse(date, "yyyy-MM-dd HH:mm");
|
}
|
|
/**
|
* 格式化日期
|
*/
|
public static Date parseTime(String date) {
|
return parse(date, "yyyy-MM-dd HH:mm:ss");
|
}
|
|
/**
|
* 格式化日期
|
*/
|
public static Date parse(String date, String pattern) {
|
try {
|
return DateUtils.parseDate(date, pattern);
|
} catch (ParseException e) {
|
e.printStackTrace();
|
return null;
|
}
|
}
|
|
/**
|
* 格式化日期
|
*/
|
public static String format(Date date, String pattern) {
|
return DateFormatUtils.format(date, pattern);
|
}
|
|
/**
|
* 把日期转换为Timestamp
|
*/
|
public static Timestamp format(Date date) {
|
return new Timestamp(date.getTime());
|
}
|
|
/**
|
* 校验日期是否合法
|
*/
|
public static boolean isValidDate(String s) {
|
return parse(s, "yyyy-MM-dd HH:mm:ss") != null;
|
}
|
|
/**
|
* 校验日期是否合法
|
*/
|
public static boolean isValidDate(String s, String pattern) {
|
return parse(s, pattern) != null;
|
}
|
|
public static int getDiffYear(String startTime, String endTime) {
|
DateFormat fmt = new SimpleDateFormat("yyyy-MM-dd");
|
try {
|
int years = (int) (((fmt.parse(endTime).getTime() - fmt.parse(
|
startTime).getTime()) / (1000 * 60 * 60 * 24)) / 365);
|
return years;
|
} catch (Exception e) {
|
// 如果throw java.text.ParseException或者NullPointerException,就说明格式不对
|
return 0;
|
}
|
}
|
|
/**
|
* <li>功能描述:时间相减得到天数
|
*/
|
public static long getDaySub(String beginDateStr, String endDateStr) {
|
long day = 0;
|
SimpleDateFormat format = new SimpleDateFormat(
|
"yyyy-MM-dd");
|
Date beginDate = null;
|
Date endDate = null;
|
|
try {
|
beginDate = format.parse(beginDateStr);
|
endDate = format.parse(endDateStr);
|
} catch (ParseException e) {
|
e.printStackTrace();
|
}
|
day = (endDate.getTime() - beginDate.getTime()) / (24 * 60 * 60 * 1000);
|
// System.out.println("相隔的天数="+day);
|
|
return day;
|
}
|
|
/**
|
* 得到n天之后的日期
|
*/
|
public static String getAfterDayDate(String days) {
|
int daysInt = Integer.parseInt(days);
|
|
// java.util包
|
Calendar canlendar = Calendar.getInstance();
|
// 日期减 如果不够减会将月变动
|
canlendar.add(Calendar.DATE, daysInt);
|
Date date = canlendar.getTime();
|
|
SimpleDateFormat sdfd = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
|
String dateStr = sdfd.format(date);
|
|
return dateStr;
|
}
|
|
/**
|
* 得到n天之后的日期
|
*/
|
public static String getAfterDayDate(String days, String pattern) {
|
int daysInt = Integer.parseInt(days);
|
|
// java.util包
|
Calendar canlendar = Calendar.getInstance();
|
// 日期减 如果不够减会将月变动
|
canlendar.add(Calendar.DATE, daysInt);
|
Date date = canlendar.getTime();
|
|
SimpleDateFormat sdfd = new SimpleDateFormat(pattern == null ? "yyyy-MM-dd HH:mm:ss" : "yyyy-MM-dd");
|
String dateStr = sdfd.format(date);
|
|
return dateStr;
|
}
|
|
/**
|
* 得到X分钟前/后的时间
|
*
|
* @param minutes
|
* @param pattern
|
* @return
|
*/
|
public static String getForwardOrAfterMinutesDate(int minutes, String pattern) {
|
// java.util包
|
Calendar canlendar = Calendar.getInstance();
|
// 日期减 如果不够减会将月变动
|
canlendar.add(Calendar.MINUTE, minutes);
|
Date date = canlendar.getTime();
|
|
SimpleDateFormat sdfd = new SimpleDateFormat(pattern == null ? "yyyy-MM-dd HH:mm:ss" : pattern);
|
String dateStr = sdfd.format(date);
|
|
return dateStr;
|
}
|
|
/**
|
* 得到X小时前/后的时间
|
*
|
* @param hours 正数:X小时后的时间,负数:X小时前的时间
|
* @param pattern 时间格式
|
* @return
|
*/
|
public static String getForwardOrAfterHoursDate(int hours, String pattern) {
|
// java.util包
|
Calendar canlendar = Calendar.getInstance();
|
// 日期减 如果不够减会将月变动
|
canlendar.add(Calendar.HOUR_OF_DAY, hours);
|
Date date = canlendar.getTime();
|
|
SimpleDateFormat sdfd = new SimpleDateFormat(pattern == null ? "yyyy-MM-dd HH:mm:ss" : pattern);
|
String dateStr = sdfd.format(date);
|
|
return dateStr;
|
}
|
|
/**
|
* 得到n天之后是周几
|
*/
|
public static String getAfterDayWeek(String days) {
|
int daysInt = Integer.parseInt(days);
|
|
// java.util包
|
Calendar canlendar = Calendar.getInstance();
|
// 日期减 如果不够减会将月变动
|
canlendar.add(Calendar.DATE, daysInt);
|
Date date = canlendar.getTime();
|
|
SimpleDateFormat sdf = new SimpleDateFormat("E");
|
String dateStr = sdf.format(date);
|
|
return dateStr;
|
}
|
|
/**
|
* 判断日期是否相同(今天、本月、今年)
|
*
|
* @param date1 时间A
|
* @param date2 时间B
|
* @param pattern 时间格式,默认:YYYYMMdd
|
* @return
|
*/
|
public static boolean isSameDate(Date date1, Date date2, String pattern) {
|
SimpleDateFormat fmt = new SimpleDateFormat(pattern == null ? "YYYYMMdd" : pattern);
|
return fmt.format(date1).equals(fmt.format(date2));
|
}
|
|
/**
|
* 判断时间是否在时间段内
|
*
|
* @param nowTime
|
* @param beginTime
|
* @param endTime
|
*/
|
public static boolean inTimePeriod(Date nowTime, Date beginTime, Date endTime) {
|
try {
|
Calendar now = Calendar.getInstance();
|
now.setTime(nowTime);
|
|
Calendar begin = Calendar.getInstance();
|
begin.setTime(beginTime);
|
|
Calendar end = Calendar.getInstance();
|
end.setTime(endTime);
|
|
// 开始时间、结束时间在同一天, now > begin && now < end
|
if (now.after(begin) && now.before(end)) {
|
return true;
|
}
|
// 在时间点上,或全天范围
|
if (begin.equals(now) || now.equals(end) || begin.equals(end)) {
|
return true;
|
}
|
// 结束时间属于第二天,begin > end && (begin < now || now < end)
|
else if (begin.after(end) && (begin.before(now) || now.before(end))) {
|
return true;
|
}
|
} catch (Exception e) {
|
e.printStackTrace();
|
}
|
return false;
|
}
|
|
// 获得本季度
|
public static String getThisSeasonTime(int month) {
|
int array[][] = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}, {10, 11, 12}};
|
int season = 1;
|
if (month >= 1 && month <= 3) {
|
season = 1;
|
}
|
if (month >= 4 && month <= 6) {
|
season = 2;
|
}
|
if (month >= 7 && month <= 9) {
|
season = 3;
|
}
|
if (month >= 10 && month <= 12) {
|
season = 4;
|
}
|
int start_month = array[season - 1][0];
|
int end_month = array[season - 1][2];
|
|
Date date = new Date();
|
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy");// 可以方便地修改日期格式
|
String years = dateFormat.format(date);
|
int years_value = Integer.parseInt(years);
|
|
int start_days = 1;// years+"-"+String.valueOf(start_month)+"-1";//getLastDayOfMonth(years_value,start_month);
|
int end_days = getLastDayOfMonth(years_value, end_month);
|
String seasonDate = years_value + "-" + start_month + "-" + start_days + " 00:00:00"
|
+ "," + years_value + "-" + end_month + "-" + end_days + " 23:59:59";
|
return seasonDate;
|
|
}
|
|
/**
|
* 返回指定日期的月的最后一天
|
*
|
* @param date
|
* @return Date
|
*/
|
public static Date getDateLastDayOfMonth(Date date) {
|
Calendar calendar = Calendar.getInstance();
|
calendar.setTime(date);
|
calendar.set(calendar.get(Calendar.YEAR),
|
calendar.get(Calendar.MONTH), 1);
|
calendar.roll(Calendar.DATE, -1);
|
return calendar.getTime();
|
}
|
|
/**
|
* 获取指定时间月份最后一天
|
*
|
* @param date 指定时间,null默认当前时间
|
* @return
|
*/
|
public static String getLastDayOfMonth(Date date) {
|
// 设置时间格式
|
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
|
//获得实体类
|
Calendar calendar = Calendar.getInstance();
|
if (date != null) {
|
calendar.setTime(date);
|
}
|
//设置最后一天
|
calendar.set(Calendar.DAY_OF_MONTH, calendar.getActualMaximum(Calendar.DAY_OF_MONTH));
|
// 最后一天格式化
|
String lastDay = sdf.format(calendar.getTime());
|
return lastDay;
|
}
|
|
/**
|
* 获取指定时间前后X月最后一天
|
*
|
* @param month 指定时间 = 指定月份 + month
|
* @param date 指定时间,null默认当前时间
|
* @return
|
*/
|
public static String getLastDayOfMonth(int month, Date date) {
|
// 设置时间格式
|
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
|
//获得实体类
|
Calendar calendar = Calendar.getInstance();
|
if (date != null) {
|
// 设置为当前时间
|
calendar.setTime(date);
|
}
|
// 设置上X月
|
calendar.set(Calendar.MONTH, calendar.get(Calendar.MONTH) + month);
|
//设置最后一天
|
calendar.set(Calendar.DAY_OF_MONTH, calendar.getActualMaximum(Calendar.DAY_OF_MONTH));
|
String lastDay = sdf.format(calendar.getTime());
|
return lastDay;
|
}
|
|
/**
|
* 获取某年某月的最后一天
|
*/
|
private static int getLastDayOfMonth(int year, int month) {
|
if (month == 1 || month == 3 || month == 5 || month == 7 || month == 8
|
|| month == 10 || month == 12) {
|
return 31;
|
}
|
if (month == 4 || month == 6 || month == 9 || month == 11) {
|
return 30;
|
}
|
if (month == 2) {
|
if (isLeapYear(year)) {
|
return 29;
|
} else {
|
return 28;
|
}
|
}
|
return 0;
|
}
|
|
/**
|
* 是否闰年
|
*/
|
public static boolean isLeapYear(int year) {
|
return (year % 4 == 0 && year % 100 != 0) || (year % 400 == 0);
|
}
|
|
// 将date类型转换为String类型
|
public static String dateToString(Date date) {
|
String dateStr = "";
|
if (date != null) {
|
SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-dd");
|
dateStr = sf.format(date);
|
}
|
return dateStr;
|
}
|
|
/**
|
* 返回当前日期 当天最后一秒
|
*
|
* @param date
|
* @return Date
|
*/
|
public static String getLastNowDate(Date date) {
|
String nowDate = DateUtils2.dateToString(date);
|
nowDate = nowDate + " 23:59:59";
|
return nowDate;
|
}
|
|
/**
|
* 返回指定日期的月的第一天
|
*
|
* @param date
|
* @return
|
*/
|
public static Date getFirstDayOfMonth(Date date) {
|
Calendar calendar = Calendar.getInstance();
|
calendar.setTime(date);
|
calendar.set(calendar.get(Calendar.YEAR),
|
calendar.get(Calendar.MONTH), 1);
|
return calendar.getTime();
|
}
|
|
/**
|
* 获取当天开始时间
|
*/
|
public static String getStartNowDate() {
|
String nowDate = DateUtils2.dateToString(new Date());
|
nowDate = nowDate + " 00:00:00";
|
return nowDate;
|
}
|
|
public static String getStartNowDate(Date date) {
|
String nowDate = DateUtils2.dateToString(date);
|
nowDate = nowDate + " 00:00:00";
|
return nowDate;
|
}
|
|
}
|