/**
* Copyright (c) 2015-2016, Chill Zhuang 庄骞 (smallchill@163.com).
*
* 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
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* 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.dsh.account.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;
import java.util.Objects;
import java.util.TimeZone;
public class DateUtil {
private static TimeZone tz = TimeZone.getTimeZone("GMT+8");
/**
* 获取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;
}
/**
* 日期比较,如果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 {
if (Objects.nonNull(date)) {
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;
}
}
/**
*
功能描述:时间相减得到天数
*/
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);
Calendar canlendar = Calendar.getInstance(); // java.util包
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 getAfterDayWeek(String days) {
int daysInt = Integer.parseInt(days);
Calendar canlendar = Calendar.getInstance(); // java.util包
canlendar.add(Calendar.DATE, daysInt); // 日期减 如果不够减会将月变动
Date date = canlendar.getTime();
SimpleDateFormat sdf = new SimpleDateFormat("E");
String dateStr = sdf.format(date);
return dateStr;
}
/**
* 得到系统日期
*
* @return
*/
public static Date getDate() {
TimeZone.setDefault(tz);
return new Date();
}
/**
* 获取当前毫秒数
*
* @return long
*/
public static long getCurMilli() {
long millisecond = 0;
Calendar cal = Calendar.getInstance();
millisecond = cal.getTimeInMillis();
return millisecond;
}
/**
* 得到系统Calendar日期
*
* @return
*/
public static Calendar getCalendar() {
TimeZone.setDefault(tz);
Calendar cal = Calendar.getInstance();
return cal;
}
/**
* 毫秒转日期时间
*
* @param millisecond
* @return
*/
public static String getDateTime(long millisecond) {
if (millisecond == 0) {
millisecond = getCurMilli();
}
SimpleDateFormat dateformat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Calendar calendar = getCalendar();
calendar.setTimeInMillis(millisecond);
return dateformat.format(calendar.getTime());
}
/**
* 日期转毫秒(加分钟)
*
* @param date
* @return
*/
public static long getMillisecond_fz(String date, Integer day) {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String newDate = "";
if ("".equals(date)) {
newDate = sdf.format(DateUtil.getDate());
} else {
newDate = getDateTime(Long.parseLong(date));
}
Date dt = null;
try {
dt = sdf.parse(newDate);
} catch (ParseException e) {
e.printStackTrace();
}
Calendar rightNow = Calendar.getInstance();
rightNow.setTime(dt);
rightNow.add(Calendar.MINUTE, day);
Date dt1 = rightNow.getTime();
return dt1.getTime();
}
//
// public static void main(String[] args) throws ParseException {
// String big = "1997-08-16";
// SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");
// int age = DateUtil.age(simpleDateFormat.parse(big));
// System.out.println(age);
// }
/**
* 计算年龄
*
* @param birthDate
* @return
*/
public static int age(Date birthDate) {
// 当前日历
Calendar nowCalendar = Calendar.getInstance();
// 生日大于当前日期
if (nowCalendar.before(birthDate)) {
throw new IllegalArgumentException("The birth date is before current time, it's unbelievable");
}
// 当前年月日
int yearNow = nowCalendar.get(Calendar.YEAR);
int monthNow = nowCalendar.get(Calendar.MONTH);
int dayNow = nowCalendar.get(Calendar.DAY_OF_MONTH);
// 出生日期年月日
Calendar birthCalendar = Calendar.getInstance();
birthCalendar.setTime(birthDate);
int yearBirth = birthCalendar.get(Calendar.YEAR);
int monthBirth = birthCalendar.get(Calendar.MONTH);
int dayBirth = birthCalendar.get(Calendar.DAY_OF_MONTH);
// 粗计算年龄
int age = yearNow - yearBirth;
// 当前月份小于出生月份年龄减一
if (monthNow < monthBirth) {
age--;
}
// 当前月份等于出生月份,日小于生日年龄减一
else if (monthNow == monthBirth && dayNow < dayBirth) {
age--;
}
// 返回年龄值
return age;
}
// 获取近一周的开始时间
public static Date getLastWeekStartDate() {
Calendar calendar = Calendar.getInstance();
// 设置为当前日期的前一周
calendar.add(Calendar.DAY_OF_YEAR, -7);
// 获取近一周的开始时间
return calendar.getTime();
}
// 获取近一个月的开始时间
public static Date getLastMonthStartDate() {
Calendar calendar = Calendar.getInstance();
// 设置为当前日期的前一个月
calendar.add(Calendar.MONTH, -1);
// 获取近一个月的开始时间
return calendar.getTime();
}
// 获取近一年的开始时间
public static Date getLastYearStartDate() {
Calendar calendar = Calendar.getInstance();
// 设置为当前日期的前一年
calendar.add(Calendar.YEAR, -1);
// 获取近一年的开始时间
return calendar.getTime();
}
// 获取昨天的时间
public static Date getLastOfDate() {
Calendar calendar = Calendar.getInstance();
// 设置为当前日期的前一个月
calendar.add(Calendar.DAY_OF_YEAR, -1);
// 获取近一个月的开始时间
return calendar.getTime();
}
}