package com.ruoyi.authorize.common;
import org.apache.commons.lang3.time.DateUtils;
import java.text.*;
import java.util.Calendar;
import java.util.Date;
/**
* 日期时间工具类
* @author wq
* @version 1.0
*/
public class DateTimeUtil extends DateUtils
{
// 以毫秒表示的时间
private static final long DAY_IN_MILLIS = 24 * 3600 * 1000;
private static final long HOUR_IN_MILLIS = 3600 * 1000;
private static final long MINUTE_IN_MILLIS = 60 * 1000;
private static final long SECOND_IN_MILLIS = 1000;
private static String week[] = {
"星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六"
};
/**
* 用指定参数抽取时间日期部分
*
例如getDateSplit(System.currentTimeMillis()),"y") 为取得当前的年份
* @param date java.util.Date类型时间
* @param interval 可选值:
*
y:年
M:月
d/dm:日
dy:参数日期所代表的时间的已过的天数
*
h:12制小时
H:24制小时
m:分
*
s:秒
S:毫秒
w:星期
*
wim:参数日期所代表的月已经过的星期数
*
wm:参数日期所代表的月的星期数
*
wy:参数日期所代表的年的第几周
* @return 格式化好的时间
*/
public static int getDateExtract(Date date, String interval)
{
Calendar c = Calendar.getInstance();
c.setTime(date);
if (interval.equalsIgnoreCase("y"))
return c.get(Calendar.YEAR);
if (interval.equals("M"))
return c.get(Calendar.MONTH);
if (interval.equalsIgnoreCase("d"))
return c.get(Calendar.DATE);
if (interval.equalsIgnoreCase("dm"))
return c.get(Calendar.DAY_OF_MONTH);
if (interval.equalsIgnoreCase("dy"))
return c.get(Calendar.DAY_OF_YEAR);
if (interval.equals("h"))
return c.get(Calendar.HOUR);
if (interval.equals("H"))
return c.get(Calendar.HOUR_OF_DAY);
if (interval.equals("m"))
return c.get(Calendar.MINUTE);
if (interval.equals("s"))
return c.get(Calendar.SECOND);
if (interval.equals("S"))
return c.get(Calendar.MILLISECOND);
if (interval.equalsIgnoreCase("w"))
return c.get(Calendar.DAY_OF_WEEK);
if (interval.equalsIgnoreCase("wim"))
return c.get(Calendar.DAY_OF_WEEK_IN_MONTH);
if (interval.equalsIgnoreCase("wm"))
return c.get(Calendar.WEEK_OF_MONTH);
if (interval.equalsIgnoreCase("wy"))
return c.get(Calendar.WEEK_OF_YEAR);
else
return -1;
}
/**
* 用指定参数抽取时间日期部分
* @param dateStr String类型日期时间
* @param format 日期时间格式
* @param interval 可选值:
*
y:年
M:月
d/dm:日
dy:参数日期所代表的时间的已过的天数
*
h:12制小时
H:24制小时
m:分
*
s:秒
S:毫秒
w:星期
*
wim:参数日期所代表的月已经过的星期数
*
wm:参数日期所代表的月的星期数
*
wy:参数日期所代表的年的第几周
* @return 格式化好的时间
* @throws ParseException
*/
public static int getDateExtract(String dateStr, String format, String interval)
throws ParseException
{
SimpleDateFormat sformat = new SimpleDateFormat(format);
Date date = sformat.parse(dateStr);
return getDateExtract(date, interval);
}
/**
* @param value 时间
* @return yyyy-MM-dd HH:mm:ss格式的时间字符串
*/
public static String getSpecifyDateTime(long value)
{
return getFormatDateTime(new Date(value), "yyyy-MM-dd HH:mm:ss");
}
/**
* 转换一个Long型到Date类型
* @param value 时间
* @return java.util.Date
*/
public static Date getDateTime(long value)
{
Calendar c = Calendar.getInstance();
c.setTimeInMillis(value);
return c.getTime();
}
/**
* 取得当前星期
* @return 字符串
*/
public static String getCurrentWeek()
{
return week[getDateExtract(new Date(), "w") - 1];
}
/**
* 从给出的时间计算星期
* @param date 日期
* @return 字符串
*/
public static String getWeek(Date date)
{
return week[getDateExtract(date, "w") - 1];
}
/**
* 从给出的时间计算星期
* @param dateStr 日期字符串
* @param format 日期格式
* @return 字符串
*/
public static String getWeek(String dateStr, String format)
throws ParseException
{
return week[getDateExtract(dateStr, format, "w") - 1];
}
/**
* 用指定格式,格式一个日期
* @param date
* @param format
* @return 字符串
*/
public static String getFormatDateTime(Date date, String format)
{
return (new SimpleDateFormat(format)).format(date);
}
/**
* string类型时间转为java.util.Date类型时间 yyyy-MM-dd 无时分秒
* @param strDate
* @return
* @throws ParseException
*/
public static Date changeStringToDate(String strDate)
throws ParseException
{
if (strDate == null || strDate.equals(""))
return null;
else
return DateFormat.getDateInstance(DateFormat.DEFAULT).parse(strDate);
}
/**
* 去得紧凑型日期 例如yyyyMMdd
* @param data 型如yyyy-MM-dd
* @return 字符串
*/
public static String getCompactDate(String data)
{
if (data == null || data.length() < 10)
{
return "";
} else
{
data = (new StringBuilder(String.valueOf(data.substring(0, 4)))).append(data.substring(5, 7)).append(data.substring(8, 10)).toString();
return data;
}
}
/**
* 得到Long型时间从给定yyyy-MM-dd HH:mm:ss型字符串
* @param strDate
* @return Long型时间
* @throws ParseException
*/
public static long getLongDate(String strDate) throws ParseException
{
DateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date date = format.parse(strDate);
Calendar c = Calendar.getInstance();
c.setTime(date);
Long l = c.getTimeInMillis();
return l;
}
/**
* 格式化Long类型时间
* @param longDate Long类型时间
* @param format 时间格式
* @return java.util.Date
* @throws ParseException
*/
public static Date getFormatDate(long longDate, String format) throws ParseException
{
DateFormat dformat = new SimpleDateFormat(format);
Calendar c = Calendar.getInstance();
c.setTimeInMillis(longDate);
String dt = dformat.format(c.getTime());
return dformat.parse(dt);
}
/**
* 格式化String类型时间
* @param strDate String类型时间
* @param format 时间格式
* @return java.util.Date
* @throws ParseException
*/
public static Date getFormatDate(String strDate, String format) throws ParseException
{
DateFormat dformat = new SimpleDateFormat(format);
return dformat.parse(strDate);
}
/**
*将字符串格式yyyyMMdd的字符串转为日期,格式"yyyy-MM-dd"
*
* @param date 日期字符串
* @return 返回格式化的日期
* @throws ParseException 分析时意外地出现了错误异常
*/
public static String strToDateFormat(String date) throws ParseException {
SimpleDateFormat formatter = new SimpleDateFormat("yyyyMMddHHmmss");
formatter.setLenient(false);
Date newDate= formatter.parse(date);
formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
return formatter.format(newDate);
}
/**
* 格式化Date类型时间
* @param date Date类型时间
* @param format 时间格式
* @return java.util.Date
* @throws ParseException
*/
public static Date getFormatDate(Date date, String format) throws ParseException
{
DateFormat dformat = new SimpleDateFormat(format);
String dt = dformat.format(date);
return dformat.parse(dt);
}
/**
* 用指定格式格式化当前时间
*
* @param format
*
时间格式 例yyyy-MM-dd HH:mm:ss
*
"yyyy.MM.dd G 'at' HH:mm:ss z" 2001.07.04 AD at 12:08:56 PDT
*
"EEE, MMM d, ''yy" 星期五, 三月 9, '12
*
"h:mm a" 12:08 PM
*
GGG hh:mm aaa" 02001.July.04 AD 12:08 PM
*
"EEE, d MMM yyyy HH:mm:ss Z" Wed, 4 Jul 2001 12:08:56 -0700
*
"yyMMddHHmmssZ" 010704120856-0700
*
"yyyy-MM-dd'T'HH:mm:ss.SSSZ" 2001-07-04T12:08:56.235-0700
* @return 格式化的时间
*/
public static String getCurrentDate(String format)
{
return getFormatDateTime(new Date(), format);
}
/**
* 反回一个Long型的当前时间
* @return 当前时间
*/
public static Long getCurrentLongDate(){
return new Date().getTime();
}
/**
* 取得yyyy-MM-dd格式的当前时间
* @return 格式化的时间
*/
public static String getCurrentDate()
{
return getCurrentDate("yyyy-MM-dd");
}
// ////////////////////////////////////////////////////////////////////////////
// dateDiff
// 计算两个日期之间的差值
// ////////////////////////////////////////////////////////////////////////////
/**
* 计算两个时间之间的差值,根据标志的不同而不同
*
* @param flag
* 计算标志,表示按照年/月/日/时/分/秒等计算
* @param calSrc
* 减数
* @param calDes
* 被减数
* @return 两个日期之间的差值
*/
public static int dateDiff(char flag, Calendar calSrc, Calendar calDes) {
long millisDiff = calSrc.getTime().getTime() - calDes.getTime().getTime();
if (flag == 'y') {
return (calSrc.get(calSrc.YEAR) - calDes.get(calDes.YEAR));
}
if (flag == 'd') {
return (int) (millisDiff / DAY_IN_MILLIS);
}
if (flag == 'h') {
return (int) (millisDiff / HOUR_IN_MILLIS);
}
if (flag == 'm') {
return (int) (millisDiff / MINUTE_IN_MILLIS);
}
if (flag == 's') {
return (int) (millisDiff / SECOND_IN_MILLIS);
}
return 0;
}
/**
* 传入时间加上或减去指定的时间间隔
* @param date
* @param interval
* @return
*/
public static Date addDay(Date date, int interval) {
Calendar cal = Calendar.getInstance();
cal.setTime(date);
cal.add(Calendar.DAY_OF_MONTH, interval);
return cal.getTime();
}
/**
* 传入时间 加上或减去 小时
* @param date
* @param interval
* @return
*/
public static Date addHour(Date date, int interval){
Calendar cal = Calendar.getInstance();
cal.setTime(date);
cal.add(Calendar.HOUR_OF_DAY, interval);
return cal.getTime();
}
/*
* 传入时间 加上或减去 分钟
*/
public static Date addMinute(Date date, int interval){
Calendar cal = Calendar.getInstance();
cal.setTime(date);
cal.add(Calendar.MINUTE, interval);
return cal.getTime();
}
/*
* 传入时间 加上或减去 秒
*/
public static Date addSecond(Date date, int interval){
Calendar cal = Calendar.getInstance();
cal.setTime(date);
cal.add(Calendar.SECOND, interval);
return cal.getTime();
}
// public static void main(String args[]) throws ParseException
// {
// System.out.println(getFormatDateTime(addDay(new Date(),-3), "yyyy-MM-dd HH:mm:ss"));
// }
}