package com.shopx5.utils;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
/**
* 描述:公共日期工具类
*/
public class DateUtils {
public static String DATE_FORMAT = "yyyy-MM-dd";
public static String DATE_TIME_FORMAT = "yyyy-MM-dd HH:mm:ss";
public static String DATE_FORMAT_CHINESE = "yyyy年M月d日";
/**
* 获取当前日期
* @return
*/
public static String getCurrentDate() {
String datestr = null;
SimpleDateFormat df = new SimpleDateFormat(DateUtils.DATE_FORMAT);
datestr = df.format(new Date());
return datestr;
}
/**
* 获取当前日期时间
* @return
*/
public static String getCurrentDateTime() {
String datestr = null;
SimpleDateFormat df = new SimpleDateFormat(DateUtils.DATE_TIME_FORMAT);
datestr = df.format(new Date());
return datestr;
}
/**
* 获取当前日期时间
* @return
*/
public static String getCurrentDateTime(String Dateformat) {
String datestr = null;
SimpleDateFormat df = new SimpleDateFormat(Dateformat);
datestr = df.format(new Date());
return datestr;
}
public static String dateToDateTime(Date date) {
String datestr = null;
SimpleDateFormat df = new SimpleDateFormat(DateUtils.DATE_TIME_FORMAT);
datestr = df.format(date);
return datestr;
}
/**
* 将字符串日期转换为日期格式
* @param datestr
* @return
*/
public static Date stringToDate(String datestr) {
if (datestr == null || datestr.equals("")) {
return null;
}
Date date = new Date();
SimpleDateFormat df = new SimpleDateFormat(DateUtils.DATE_FORMAT);
try {
date = df.parse(datestr);
} catch (ParseException e) {
date = DateUtils.stringToDate(datestr, "yyyyMMdd");
}
return date;
}
/**
* 将字符串日期转换为日期格式 自定義格式
* @param datestr
* @return
*/
public static Date stringToDate(String datestr, String dateformat) {
Date date = new Date();
SimpleDateFormat df = new SimpleDateFormat(dateformat);
try {
date = df.parse(datestr);
} catch (ParseException e) {
e.printStackTrace();
}
return date;
}
/**
* 将日期格式日期转换为字符串格式
* @param date
* @return
*/
public static String dateToString(Date date) {
String datestr = null;
SimpleDateFormat df = new SimpleDateFormat(DateUtils.DATE_FORMAT);
datestr = df.format(date);
return datestr;
}
/**
* 将日期格式日期转换为字符串格式 自定義格式
* @param date
* @param dateformat
* @return
*/
public static String dateToString(Date date, String dateformat) {
String datestr = null;
SimpleDateFormat df = new SimpleDateFormat(dateformat);
datestr = df.format(date);
return datestr;
}
/**
* 获取日期的DAY值
* @param date
* 输入日期
* @return
*/
public static int getDayOfDate(Date date) {
int d = 0;
Calendar cd = Calendar.getInstance();
cd.setTime(date);
d = cd.get(Calendar.DAY_OF_MONTH);
return d;
}
/**
* 获取日期的MONTH值
* @param date
* 输入日期
* @return
*/
public static int getMonthOfDate(Date date) {
int m = 0;
Calendar cd = Calendar.getInstance();
cd.setTime(date);
m = cd.get(Calendar.MONTH) + 1;
return m;
}
/**
* 获取日期的YEAR值
* @param date
* 输入日期
* @return
*/
public static int getYearOfDate(Date date) {
int y = 0;
Calendar cd = Calendar.getInstance();
cd.setTime(date);
y = cd.get(Calendar.YEAR);
return y;
}
/**
* 获取星期几
* @param date
* 输入日期
* @return
*/
public static int getWeekOfDate(Date date) {
int wd = 0;
Calendar cd = Calendar.getInstance();
cd.setTime(date);
wd = cd.get(Calendar.DAY_OF_WEEK) - 1;
return wd;
}
/**
* 获取输入日期的当月第一天
* @param date
* 输入日期
* @return
*/
public static Date getFirstDayOfMonth(Date date) {
Calendar cd = Calendar.getInstance();
cd.setTime(date);
cd.set(Calendar.DAY_OF_MONTH, 1);
return cd.getTime();
}
/**
* 获得输入日期的当月最后一天
* @param date
*/
public static Date getLastDayOfMonth(Date date) {
return DateUtils.addDay(DateUtils.getFirstDayOfMonth(DateUtils.addMonth(date, 1)), -1);
}
/**
* 判断是否是闰年
* @param date
* 输入日期
* @return 是true 否false
*/
public static boolean isLeapYEAR(Date date) {
Calendar cd = Calendar.getInstance();
cd.setTime(date);
int year = cd.get(Calendar.YEAR);
if (year % 4 == 0 && year % 100 != 0 | year % 400 == 0) {
return true;
} else {
return false;
}
}
/**
* 根据整型数表示的年月日,生成日期类型格式
* @param year
* 年
* @param month
* 月
* @param day
* 日
* @return
*
*/
public static Date getDateByYMD(int year, int month, int day) {
Calendar cd = Calendar.getInstance();
cd.set(year, month - 1, day);
return cd.getTime();
}
/**
* 获取年周期对应日
* @param date
* 输入日期
* @param iyear
* 年数 負數表示之前
* @return
*/
public static Date getYearCycleOfDate(Date date, int iyear) {
Calendar cd = Calendar.getInstance();
cd.setTime(date);
cd.add(Calendar.YEAR, iyear);
return cd.getTime();
}
/**
* 获取月周期对应日
* @param date
* 输入日期
* @param i
* @return
*/
public static Date getMonthCycleOfDate(Date date, int i) {
Calendar cd = Calendar.getInstance();
cd.setTime(date);
cd.add(Calendar.MONTH, i);
return cd.getTime();
}
/**
* 计算 fromDate 到 toDate 相差多少年
* @param fromDate
* @param toDate
* @return 年数
*/
public static int getYearByMinusDate(Date fromDate, Date toDate) {
Calendar df = Calendar.getInstance();
df.setTime(fromDate);
Calendar dt = Calendar.getInstance();
dt.setTime(toDate);
return dt.get(Calendar.YEAR) - df.get(Calendar.YEAR);
}
/**
* 计算 fromDate 到 toDate 相差多少个月
* @param fromDate
* @param toDate
* @return 月数
*/
public static int getMonthByMinusDate(Date fromDate, Date toDate) {
Calendar df = Calendar.getInstance();
df.setTime(fromDate);
Calendar dt = Calendar.getInstance();
dt.setTime(toDate);
return dt.get(Calendar.YEAR) * 12 + dt.get(Calendar.MONTH)
- (df.get(Calendar.YEAR) * 12 + df.get(Calendar.MONTH));
}
/**
* 计算 fromDate 到 toDate 相差多少天
* @param fromDate
* @param toDate
* @return 天数
*/
public static long getDayByMinusDate(Object fromDate, Object toDate) {
Date f = DateUtils.chgObject(fromDate);
Date t = DateUtils.chgObject(toDate);
long fd = f.getTime();
long td = t.getTime();
return (td - fd) / (24L * 60L * 60L * 1000L);
}
/**
* 计算年龄
* @param birthday
* 生日日期
* @param calcDate
* 要计算的日期点
* @return
*/
public static int calcAge(Date birthday, Date calcDate) {
int cYear = DateUtils.getYearOfDate(calcDate);
int cMonth = DateUtils.getMonthOfDate(calcDate);
int cDay = DateUtils.getDayOfDate(calcDate);
int bYear = DateUtils.getYearOfDate(birthday);
int bMonth = DateUtils.getMonthOfDate(birthday);
int bDay = DateUtils.getDayOfDate(birthday);
if (cMonth > bMonth || (cMonth == bMonth && cDay > bDay)) {
return cYear - bYear;
} else {
return cYear - 1 - bYear;
}
}
/**
* 从身份证中获取出生日期
* @param idno
* 身份证号码
* @return
*/
public static String getBirthDayFromIDCard(String idno) {
Calendar cd = Calendar.getInstance();
if (idno.length() == 15) {
cd.set(Calendar.YEAR, Integer.valueOf("19" + idno.substring(6, 8)).intValue());
cd.set(Calendar.MONTH, Integer.valueOf(idno.substring(8, 10)).intValue() - 1);
cd.set(Calendar.DAY_OF_MONTH, Integer.valueOf(idno.substring(10, 12)).intValue());
} else if (idno.length() == 18) {
cd.set(Calendar.YEAR, Integer.valueOf(idno.substring(6, 10)).intValue());
cd.set(Calendar.MONTH, Integer.valueOf(idno.substring(10, 12)).intValue() - 1);
cd.set(Calendar.DAY_OF_MONTH, Integer.valueOf(idno.substring(12, 14)).intValue());
}
return DateUtils.dateToString(cd.getTime());
}
/**
* 在输入日期上增加(+)或减去(-)天数
* @param date
* 输入日期
* @param iday
* 要增加或减少的天数
*/
public static Date addDay(Date date, int iday) {
Calendar cd = Calendar.getInstance();
cd.setTime(date);
cd.add(Calendar.DAY_OF_MONTH, iday);
return cd.getTime();
}
/**
* 在输入日期上增加(+)或减去(-)月份
* @param date
* 输入日期
* @param imonth
* 要增加或减少的月分数
*/
public static Date addMonth(Date date, int imonth) {
Calendar cd = Calendar.getInstance();
cd.setTime(date);
cd.add(Calendar.MONTH, imonth);
return cd.getTime();
}
/**
* 在输入日期上增加(+)或减去(-)年份
* @param date
* 输入日期
* @param iyear
* 要增加或减少的年数
*/
public static Date addYear(Date date, int iyear) {
Calendar cd = Calendar.getInstance();
cd.setTime(date);
cd.add(Calendar.YEAR, iyear);
return cd.getTime();
}
/**
* 將OBJECT類型轉換為Date
* @param date
* @return
*/
public static Date chgObject(Object date) {
if (date != null && date instanceof Date) {
return (Date) date;
}
if (date != null && date instanceof String) {
return DateUtils.stringToDate((String) date);
}
return null;
}
public static long getAgeByBirthday(String date) {
Date birthday = stringToDate(date, "yyyy-MM-dd");
long sec = new Date().getTime() - birthday.getTime();
long age = sec / (1000 * 60 * 60 * 24) / 365;
return age;
}
/**
* 获取过去 几天内的日期数组
* @param intervals
* 天内
* @return 日期数组
*/
public static ArrayList<String> getIntervalsDate(int intervals) {
ArrayList<String> pastDaysList = new ArrayList<>();
ArrayList<String> fetureDaysList = new ArrayList<>();
for (int i = 0; i <intervals; i++) {
pastDaysList.add(getPastDate(i));
fetureDaysList.add(getFetureDate(i));
}
return pastDaysList;
}
/**
* 获取过去 第几天的日期
* @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");
String result = format.format(today);
return result;
}
/**
* 获取未来 第几天的日期
* @param past
* @return
*/
public static String getFetureDate(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");
String result = format.format(today);
return result;
}
/**
* 获取当天0时0分0秒的时间
* @return Date
*/
public static Date todayFirstDate() throws Exception {
Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.HOUR_OF_DAY, 0);
calendar.set(Calendar.MINUTE, 0);
calendar.set(Calendar.SECOND, 0);
calendar.set(Calendar.MILLISECOND, 0);
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String dateStr = sdf.format(calendar.getTime());
Date date = sdf.parse(dateStr);
return date;
}
/**
* 获取当天23时23分59秒的时间
* @return Date
*/
public static Date todayLastDate() throws Exception {
Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.HOUR_OF_DAY, 23);
calendar.set(Calendar.MINUTE, 59);
calendar.set(Calendar.SECOND, 59);
calendar.set(Calendar.MILLISECOND, 999);
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String dateStr = sdf.format(calendar.getTime());
Date date = sdf.parse(dateStr);
return date;
}
/**
* 将北京时间转换为Unix时间,获取一个十位数的字符串
* 供直播推流、拉流使用
* @return
*/
public static Long longTodate() {
Date timeDate =null;
try {
//获取当前时间
long longTime = System.currentTimeMillis();
longTime+=30*1000*60*60;//在当前日期是增加3个小时。即有效时间3个小时
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
timeDate = df.parse(df.format(longTime));
} catch (Exception e) {
e.printStackTrace();
}
//将日期转换为十位数的纯数字字符串
long time = timeDate.getTime()/1000;
return time;
}
//获取时间段,周几都是那些天 如:dateFrom:2021-03-24至dateEnd:2021-04-01 weekDays:星期三
//返回值为[2021-03-24,2021-03-31]
public static String[] getDates(String dateFrom, String dateEnd, String weekDays) {
long time = 1l;
long perDayMilSec = 24 * 60 * 60 * 1000;
List<String> dateList = new ArrayList<String>();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
//需要查询的星期系数
String strWeekNumber = weekForNum(weekDays);
try {
dateFrom = sdf.format(sdf.parse(dateFrom).getTime() - perDayMilSec);
while (true) {
time = sdf.parse(dateFrom).getTime();
time = time + perDayMilSec;
Date date = new Date(time);
dateFrom = sdf.format(date);
if (dateFrom.compareTo(dateEnd) <= 0) {
//查询的某一时间的星期系数
Integer weekDay = dayForWeek(date);
//判断当期日期的星期系数是否是需要查询的
if (strWeekNumber.indexOf(weekDay.toString()) != -1) {
System.out.println(dateFrom);
dateList.add(dateFrom);
}
} else {
break;
}
}
} catch (ParseException e1) {
e1.printStackTrace();
}
String[] dateArray = new String[dateList.size()];
dateList.toArray(dateArray);
return dateArray;
}
public static Integer dayForWeek(Date date) {
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
return calendar.get(Calendar.DAY_OF_WEEK);
}
public static String weekForNum(String weekDays) {
//返回结果为组合的星期系数
String weekNumber = "";
//解析传入的星期
if (weekDays.indexOf("|") != -1) {//多个星期数
String[] strWeeks = weekDays.split("\\|");
for (int i = 0; i < strWeeks.length; i++) {
weekNumber = weekNumber + "" + getWeekNum(strWeeks[i]).toString();
}
} else {//一个星期数
weekNumber = getWeekNum(weekDays).toString();
}
return weekNumber;
}
//将星期转换为对应的系数 星期日:1,星期一:2,星期二:3,星期三:4,星期四:5,星期五:6,星期六:7
public static Integer getWeekNum(String strWeek) {
Integer number = 1;//默认为星期日
if ("星期日".equals(strWeek)) {
number = 1;
} else if ("星期一".equals(strWeek)) {
number = 2;
} else if ("星期二".equals(strWeek)) {
number = 3;
} else if ("星期三".equals(strWeek)) {
number = 4;
} else if ("星期四".equals(strWeek)) {
number = 5;
} else if ("星期五".equals(strWeek)) {
number = 6;
} else if ("星期六".equals(strWeek)) {
number = 7;
}
return number;
}
//两个时间段相差的月份
public static List<String> getMonthBetween(String minDate, String maxDate) throws ParseException {
ArrayList<String> result = new ArrayList<String>();
ArrayList<String> rutern = new ArrayList<String>();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM");//格式化为年月
Calendar min = Calendar.getInstance();
Calendar max = Calendar.getInstance();
min.setTime(sdf.parse(minDate));
min.set(min.get(Calendar.YEAR), min.get(Calendar.MONTH), 1);
max.setTime(sdf.parse(maxDate));
max.set(max.get(Calendar.YEAR), max.get(Calendar.MONTH), 2);
Calendar curr = min;
while (curr.before(max)) {
result.add(sdf.format(curr.getTime()));
curr.add(Calendar.MONTH, 1);
}
for (String res : result) {
String[] split = res.split("-");
rutern.add(split[1]);
}
return rutern;
}
//两个时间段属于那个季 如:beginDate:2021-03-24 endDate:2021-06-03
//返回值则为 {1,2}代表第一第二季度
// Integer.valueOf(rang) * 3 - (3 - Integer.valueOf(j))
public static Set<String> getRangeSet_Q(String beginDate, String endDate) {
/* Date1.after(Date2),当Date1大于Date2时,返回TRUE,当小于等于时,返回false;
Date1.before(Date2),当Date1小于Date2时,返回TRUE,当大于等于时,返回false;
如果业务数据存在相等的时候,而且相等时也需要做相应的业务判断或处理时,你需要使用:!Date1.after(Date2);*/
Set<String> rangeSet = null;
SimpleDateFormat sdf = null;
Date begin_date = null;
Date end_date = null;
String[] numStr = null;
String Q = null;
rangeSet = new HashSet<>();
sdf = new SimpleDateFormat("yyyy-MM");
try {
begin_date = sdf.parse(beginDate);//定义起始日期
end_date = sdf.parse(endDate);//定义结束日期
} catch (ParseException e) {
System.out.println("时间转化异常,请检查你的时间格式是否为yyyy-MM或yyyy-MM-dd");
}
Calendar dd = Calendar.getInstance();//定义日期实例
dd.setTime(begin_date);//设置日期起始时间
while (!dd.getTime().after(end_date)) {//判断是否到结束日期
numStr = sdf.format(dd.getTime()).split("-", 0);
Q = getQuarter(Integer.valueOf(numStr[1])) + "";
System.out.println(numStr[0].toString() + "年" + numStr[1].toString() + "月" + "为" + numStr[0].toString() + "年第" + Q + "季");
rangeSet.add(Q);
dd.add(Calendar.MONTH, 1);//进行当前日期月份加1
}
return rangeSet;
}
/**
* 根据月获得季度
*
* @param month 月
* @return 季度
*/
private static int getQuarter(int month) {
if (month == 1 || month == 2 || month == 3) {
return 1;
} else if (month == 4 || month == 5 || month == 6) {
return 2;
} else if (month == 7 || month == 8 || month == 9) {
return 3;
} else {
return 4;
}
}
/**
* @param args
* @throws Exception
*/
public static void main(String[] args) throws Exception {
Long aLong = longTodate();
Date todayLastDate = todayLastDate();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String date = sdf.format(todayLastDate);
Date endDate = new Date(todayLastDate.getTime() - 1000*60*60*24*7);
String date2 = sdf.format(endDate);
System.out.println(date);
System.out.println(date2);
System.out.println(aLong);
}
}
日期工具类
最新推荐文章于 2022-04-04 10:06:56 发布