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.GregorianCalendar;
import java.util.HashMap;
import java.util.Map;
import java.util.TimeZone;
/**
* 日期处理
*
* @vesion 1.0
*/
public class DateUtil
{
private final static String DATE_AND_TIME_FORMAT = "yyyy-MM-dd HH:mm:ss";
private final static String DATE_AND_TIME_MS_FORMAT = "yyyy-MM-dd HH:mm:ss.SSS";
private final static String TIME_FORMAT = "HH:mm:ss";
private final static String MM_DD_YYYY_FORMAT = "yyyy-MM-dd";
private final static String DATE_WITHOUT_SEPARATOR_FORMAT = "yyyyMMdd";
private final static String DATE_WITH_SEPARATOR_FORMAT = "yyyy-MM-dd";
private final static String DATE_YEAR_AND_MONTH_WITH_SEPARATOR_FORMAT = "yyyy-MM";
private final static String DATE_YEAR_AND_MONTH_WITH_CHINESE_FORMAT = "yyyy年MM月";
private final static String DATETIME_WITHOUT_SEPARATOR_FORMAT = "yyyyMMddHHmmss";
private final static String DATETIME_WITHOUT_SEPARATOR_FORMAT_SPACE = "yyyyMMdd HHmmss";
private final static String MM_DD_AND_HH_MM = "MM月dd日 HH:mm";
// 定义时间日期显示格式
private final static String DATE_FORMAT = "yyyy-MM-dd";
/**
* 获得timestamp类型的当前系统日期
*
* @return
*/
public Timestamp getDateTime()
{
return new Timestamp(new Date().getTime());
}
/**
* 获取当前系统日期前一日的日期
*
* @desc
* @return
* @author yang.jianqi
* @date 2016-3-2 11:33:05
* @version 1.0
*/
public static Date getYesterDayStr()
{
Calendar cal = Calendar.getInstance();
cal.add(Calendar.DAY_OF_YEAR, -1);
return cal.getTime();
}
/**
* 把形如"2012-12-21";的字符串转换成时间
*
* @desc
* @param mmDDYYYStr
* @return
* @author yang.shuai
* @date 2011-12-16 下午03:05:00
* @version 1.0
*/
public static Date getDateFromDateStr(String dateStr)
{
SimpleDateFormat insdf = new SimpleDateFormat(MM_DD_YYYY_FORMAT);
try
{
if (dateStr == null || dateStr.trim().isEmpty())
{
return null;
}
return insdf.parse(dateStr);
} catch (ParseException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
return null;
}
}
/**
* 把形如"20121221";的字符串转换成时间
*
* @desc
* @param mmDDYYYStr
* @return
* @author yang.jianqi
* @date 2016-3-2 10:31:44
* @version 1.0
*/
public static Date getDateWithoutSeparatorFromDateStr(String dateStr)
{
SimpleDateFormat insdf = new SimpleDateFormat(
DATE_WITHOUT_SEPARATOR_FORMAT);
try
{
if (dateStr == null || dateStr.trim().isEmpty())
{
return null;
}
return insdf.parse(dateStr);
} catch (ParseException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
return null;
}
}
/**
* 把形如"2012-02";的字符串转换成时间
*
* @param dateStr
* @return
*/
public static Date getDateFromDateTimeYearMonthStr(String dateStr)
{
SimpleDateFormat insdf = new SimpleDateFormat(DATE_YEAR_AND_MONTH_WITH_SEPARATOR_FORMAT);
try
{
if ((dateStr == null) || (dateStr.trim().isEmpty()))
{
return null;
}
return insdf.parse(dateStr);
} catch (ParseException e)
{
e.printStackTrace();
}
return null;
}
/**
* 把形如"2012-12-21 10:24:30";的字符串转换成时间
*
* @param dateStr
* @return
*/
public static Date getDateFromDateTimeStr(String dateStr)
{
SimpleDateFormat insdf = new SimpleDateFormat(DATE_AND_TIME_FORMAT);
try
{
if ((dateStr == null) || (dateStr.trim().isEmpty()))
{
return null;
}
return insdf.parse(dateStr);
} catch (ParseException e)
{
e.printStackTrace();
}
return null;
}
/**
* 把形如"20121221 102430";的字符串转换成时间
*
* @param dateStr
* @return
*/
public static Date getDateFromDateTimeSpaceWithoutSeparator(String dateStr)
{
SimpleDateFormat insdf = new SimpleDateFormat(
DATETIME_WITHOUT_SEPARATOR_FORMAT_SPACE);
try
{
if ((dateStr == null) || (dateStr.trim().isEmpty()))
{
return null;
}
return insdf.parse(dateStr);
} catch (ParseException e)
{
e.printStackTrace();
}
return null;
}
/**
* 把形如"20121221102430";的字符串转换成时间
*
* @param dateStr
* @return
*/
public static Date getDateFromDateTimeWithoutSeparator(String dateStr)
{
SimpleDateFormat insdf = new SimpleDateFormat(
DATETIME_WITHOUT_SEPARATOR_FORMAT);
try
{
if ((dateStr == null) || (dateStr.trim().isEmpty()))
{
return null;
}
return insdf.parse(dateStr);
} catch (ParseException e)
{
e.printStackTrace();
}
return null;
}
/**
* 根据参数获得java.sql.Date类型 dateTime为需要转换的日期参数,pattern为转换格式。 方法调用:
* getDateTime("",Util.DEFAULT_DATE_PATTERN_All),则按默认时间格式输出,格式如下
* <code>yyyy-MM-dd HH:mm:ss</code>
*
* @param dateTime
* @param pattern
* @return java.sql.Date
*/
public static Date getDateTime(String dateTime, String pattern)
{
DateFormat dateFormat = getSimpleDateFormat(pattern);
Date date = null;
try
{
date = dateFormat.parse(dateTime);
} catch (Exception e)
{
// e.printStackTrace();
return null;
}
return date;
}
/**
* 根据参数获得java.sql.Date类型 根据年、月、日参数和pattern指定的转换格式,返回对应的日期字符串。 方法调用:
* getDateTime(Util.DEFAULT_DATE_PATTERN_All,2010,6,10),则按默认时间格式输出内容如下
* <code>2010-06-10 00:00:00</code>
*
* @param pattern
* @param year
* 年
* @param month
* 月
* @param date
* 日
* @return java.sql.Date
*/
public static String getDateTime(String pattern, int year, int month,
int date)
{
DateFormat df = getSimpleDateFormat(pattern);
Calendar c = Calendar.getInstance();
c.set(year, month - 1, date);
return df.format(c.getTime());
}
/**
* 根据指定日期转换格式获得对应日期的时间字符串
*
* @param pattern
* @param dateTime
* @return String
*/
public String getDateTime(String pattern, Object dateTime)
{
return getSimpleDateFormat(pattern).format(dateTime);
}
/**
* 获取Date类型的全字符串表示格式 例子:d => yyyy-MM-dd HH:mm:ss
*
* @desc
* @param d
* @return
* @author yang.shuai
* @date 2011-11-8 下午02:57:27
* @version 1.0
*/
public static String getDateTimeStr(Date d)
{
if (d == null)
{
return "";
}
final SimpleDateFormat insdf = new SimpleDateFormat(
"yyyy-MM-dd HH:mm:ss");
return insdf.format(d);
}
/**
* 获取Date类型的全字符串表示格式 例子:d => yyyy-MM-dd
*
* @desc
* @param d
* @return
* @author yang.shuai
* @date 2011-11-8 下午02:57:27
* @version 1.0
*/
public static String getDateStr(Date d)
{
if (d == null)
{
return "";
}
final SimpleDateFormat insdf = new SimpleDateFormat("yyyy-MM-dd");
return insdf.format(d);
}
/**
* 获取String类型的全字符串表示格式 例子:d => yyyy-MM-dd
*
* @param d
* @return
*/
public static String getString2DateStr(String d)
{
Date date = null;
if (d == null)
{
return "";
} else
{
SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");// 小写的mm表示的是分钟
try
{
date = sdf.parse(d);
} catch (ParseException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
}
SimpleDateFormat insdf = new SimpleDateFormat("yyyy-MM-dd");
return insdf.format(date);
}
/**
* 获得 java.text.SimpleDateFormat
*
* @param pattern
* @return
*/
public static SimpleDateFormat getSimpleDateFormat(String pattern)
{
return new SimpleDateFormat(pattern);
}
/**
* 获得指定日期格式的指定日期时间范围内的所有日期。
*
* @param pattern
* 指定日期格式,若参数默认为Util.DEFAULT_DATE_PATTERN_YEAR_MONTH_DATE
* @param startdate
* 开始时间
* @param enddate
* 结束时间
* @return String[]
*/
public static String[] getHotelDate(String pattern, String startdate,
String enddate)
{
SimpleDateFormat f = new SimpleDateFormat(pattern);
try
{
Date d1 = f.parse(startdate);
Date d2 = f.parse(enddate);
long days = (d2.getTime() - d1.getTime()) / 3600000 / 24;
Calendar startcal = Calendar.getInstance();
Calendar endcal = Calendar.getInstance();
startcal.setTime(d1);
endcal.setTime(d2);
String hotelDate[] = new String[(int) days + 1];
hotelDate[0] = f.format(d1);
int i = 1;
while (endcal.after(startcal))
{
if (i <= days)
startcal.add(Calendar.DATE, 1);
hotelDate[i] = f.format(startcal.getTime());
i++;
}
return hotelDate;
} catch (ParseException e)
{
e.printStackTrace();
}
return null;
}
/**
* 获得当前日期为每周的第几天
*
* @param pattern
* @param dateTime
* @return
*/
public static int getDayOfWeek(String pattern, String dateTime)
{
Date date = null;
try
{
date = getSimpleDateFormat(pattern).parse(dateTime);
} catch (ParseException e)
{
// logger.error("解析日期格式错误,错误信息为:" + e.getMessage());
}
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
int weekOfDay = calendar.get(Calendar.DAY_OF_WEEK);
if (weekOfDay == 1)
{
weekOfDay = 7;
return weekOfDay;
}
return weekOfDay - 1;
}
/**
* 根据参数,获得几天后的日期
*
* @param pattern
* 日期解析类型
* @param dateTime
* 需要转换的日期
* @return
*/
public Date getDateAfter(String pattern, Date dateTime)
{
int defaultDate = 7;
Calendar now = Calendar.getInstance();
now.setTime(dateTime);
now.set(Calendar.DATE, now.get(Calendar.DATE) + defaultDate);
return now.getTime();
}
/**
* 根据参数,获得几天前的日期
*
* @param pattern
* 日期解析类型
* @param dateTime
* 需要转换的日期
* @param defaultDate
* 天数
* @author zhu.yiming
* @date 2016-8-25 15:02:00
* @version 1.0
* @return
*/
public static Date getDateBefore(Date dateTime, int defaultDate)
{
Calendar now = Calendar.getInstance();
now.setTime(dateTime);
now.set(Calendar.DATE, now.get(Calendar.DATE) - defaultDate);
return now.getTime();
}
/**
* 根据参数,获得后几天前的日期
*
* @param pattern
* 日期解析类型
* @param dateTime
* 需要转换的日期
* @param defaultDate
* 天数
* @author zhu.yiming
* @date 2016-8-25 15:02:00
* @version 1.0
* @return
*/
public static Date getDateAfter(Date dateTime, int defaultDate)
{
Calendar now = Calendar.getInstance();
now.setTime(dateTime);
now.set(Calendar.DATE, now.get(Calendar.DATE) + defaultDate);
return now.getTime();
}
/**
* 根据当前系统时间获取零点和二十四点的时间
*
* @author zhu.yiming
* @date 2016-8-25 15:03:00
* @version 1.0
* @return
* @remark 对于20161026这样格式的日期 zeroDate获取到2016-10-25 00:00:00
*/
public static Map getZeroDateAndTwelveDate(long current)
{
long zero = current / (1000 * 3600 * 24) * (1000 * 3600 * 24)
- TimeZone.getDefault().getRawOffset();// 今天零点零分零秒的毫秒数
long twelve = zero + 24 * 60 * 60 * 1000 - 1;// 今天23点59分59秒的毫秒数
Map<String, Date> dateMap = new HashMap<String, Date>();
dateMap.put("zeroDate", new Date(zero));
dateMap.put("twelveDate", new Date(twelve));
return dateMap;
}
/**
* 获得当前日期是每周的周几
*
* @return String
*/
public String getCurrentDayofWeek()
{
StringBuffer sb = new StringBuffer();
DateFormat dateFormat = getSimpleDateFormat("yyyy-MM-dd");
String dateTime = dateFormat.format(new Date());
int sIndex = dateTime.indexOf("-");
int eIndex = dateTime.lastIndexOf("-");
String year = dateTime.substring(0, sIndex);
String month = dateTime.substring(sIndex + 1, eIndex);
String day = dateTime.substring(eIndex + 1, dateTime.length());
sb.append("日期:");
sb.append(year + "年");
sb.append(month + "月");
sb.append(day + "日");
int temp = getDayOfWeek("yyyy-MM-dd", dateTime);
if (temp == 0)
{
sb.append(" 周日");
} else
{
switch (temp - 1)
{
case 1:
sb.append(" 周一");
break;
case 2:
sb.append(" 周二");
break;
case 3:
sb.append(" 周三");
break;
case 4:
sb.append(" 周四");
break;
case 5:
sb.append(" 周五");
break;
case 6:
sb.append(" 周六");
break;
default:
break;
}
}
return sb.toString();
}
/**
* 获得当前日期周的周一
*
* @return
*/
public String getCurrentMonday()
{
int mondayPlus = getMondayPlus();
GregorianCalendar currentDate = new GregorianCalendar();
currentDate.add(GregorianCalendar.DATE, mondayPlus);
Date monday = currentDate.getTime();
SimpleDateFormat dateFormat = new SimpleDateFormat(
"yyyy-MM-dd HH:mm:ss");
Date modayDate = null;
try
{
modayDate = dateFormat.parse(dateFormat.format(monday));
} catch (ParseException e)
{
// logger.error("解析日期格式错误,错误信息为:" + e.getMessage());
}
return dateFormat.format(modayDate);
}
/**
* 获得当前日期与本周一相差的天数
*
* @return
*/
private int getMondayPlus()
{
Calendar cd = Calendar.getInstance();
int dayOfWeek = cd.get(Calendar.DAY_OF_WEEK);
if (dayOfWeek == 1)
{
return -6;
} else
{
return 2 - dayOfWeek;
}
}
/**
* 得到格式化后的时间,格式为yyyy-MM-dd HH:mm:ss,如2006-02-15 15:23:45
*
* @param currDate
* 要格式化的时间
* @see #getFormatDateTime(java.util.Date, String)
* @return String 返回格式化后的时间,默认格式为yyyy-MM-dd HH:mm:ss,如2006-02-15 15:23:45
* @author jiang.hao
*/
public static String getFormatDateTime(java.util.Date currDate)
{
return getFormatDate(currDate, DATE_AND_TIME_FORMAT);
}
/**
* 得到格式化后的时间,格式为yyyy-MM-dd HH:mm:ss.SSS,如2006-02-15 15:23:45.000
*
* @param currDate
* 要格式化的时间
* @see #getFormatDateTime(java.util.Date, String)
* @return String 返回格式化后的时间,默认格式为yyyy-MM-dd HH:mm:ss.SSS,如2006-02-15
* 15:23:45.000
* @author yang.jianqi
*/
public static String getMSFormatDateTime(java.util.Date currDate)
{
return getFormatDate(currDate, DATE_AND_TIME_MS_FORMAT);
}
public static String getFormatTime(java.util.Date date)
{
return getFormatDate(date, TIME_FORMAT);
}
public static String getDateWithoutSeparator(java.util.Date date)
{
return getFormatDate(date, DATE_WITHOUT_SEPARATOR_FORMAT);
}
public static String getDateWithSeparator(java.util.Date date)
{
return getFormatDate(date, DATE_WITH_SEPARATOR_FORMAT);
}
public static String getDateYearAndMonthWithSeparator(java.util.Date date)
{
return getFormatDate(date, DATE_YEAR_AND_MONTH_WITH_SEPARATOR_FORMAT);
}
/**
* 返回yyyy年MM月格式的字符串
* @param date
* @return
*/
public static String getDateYearAndMonthWithChineseSeparator(java.util.Date date)
{
return getFormatDate(date, DATE_YEAR_AND_MONTH_WITH_CHINESE_FORMAT);
}
public static String getDateTimeWithoutSeparator(java.util.Date date)
{
return getFormatDate(date, DATETIME_WITHOUT_SEPARATOR_FORMAT);
}
/**
* 根据格式得到格式化后的日期
*
* @param currDate
* 要格式化的日期
* @param format
* 日期格式,如yyyy-MM-dd
* @see java.text.SimpleDateFormat#format(java.util.Date)
* @return String 返回格式化后的日期,格式由参数<code>format</code>
* 定义,如yyyy-MM-dd,如2006-02-15
*/
public static String getFormatDate(java.util.Date currDate, String format)
{
if (currDate == null)
{
return "";
}
SimpleDateFormat dtFormatdB = null;
try
{
dtFormatdB = new SimpleDateFormat(format);
return dtFormatdB.format(currDate);
} catch (Exception e)
{
dtFormatdB = new SimpleDateFormat(DATE_FORMAT);
try
{
return dtFormatdB.format(currDate);
} catch (Exception ex)
{
}
}
return null;
}
/**
* 获得当前日期的该月第一天日期
*/
@SuppressWarnings("deprecation")
public static String getFirstDate(String datetime, String formate)
{
datetime = getDateTimeStr(getDateTime(datetime, DATE_FORMAT));
String month = datetime.substring(5, 7);
System.out.println(month);
return datetime.substring(0, 8) + "01";
}
/**
* 获取月份的最后一天
*
* @param dateTime
* @return
*/
public static String getLastDate(String dateTime)
{
String lastday = null;
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
Calendar cale = Calendar.getInstance();
try
{
cale.setTime(sdf.parse(dateTime));
cale.add(Calendar.MONTH, 1);
cale.set(Calendar.DAY_OF_MONTH, 0);
lastday = sdf.format(cale.getTime());
} catch (ParseException e1)
{
// TODO Auto-generated catch block
e1.printStackTrace();
return null;
}
return lastday;
}
/**
* 得到格式化后的时间,格式为MM月dd日 HH:mm,如02月15日 15:23
*
* @param currDate
* 要格式化的时间
* @see #getFormatDateTime(java.util.Date, String)
* @return String 返回格式化后的时间,默认格式为MM月dd日 HH:mm,如02月15日 15:23
* @author jiang.hao
*/
public static String getFormatTradeDateTime(java.util.Date currDate)
{
return getFormatDate(currDate, MM_DD_AND_HH_MM);
}
/**
* 获取该时间的前几个月
*
* @param dateTime
* @param defaultMonth
* @return
*/
public static Date getDateBeforeByMonth(Date dateTime, int defaultMonth)
{
Calendar c = Calendar.getInstance();
c.setTime(dateTime);
c.add(Calendar.MONTH, - defaultMonth);
return c.getTime();
}
/**
* 获取该时间的后几个月
*
* @param dateTime
* @param defaultMonth
* @return
*/
public static Date getDateAfterByMonth(Date dateTime, int defaultMonth)
{
Calendar c = Calendar.getInstance();
c.setTime(dateTime);
c.add(Calendar.MONTH, defaultMonth);
return c.getTime();
}
/**
* 获取年份
*
* @param dateTime
* @return
*/
public static int getYear(Date dateTime)
{
Calendar c = Calendar.getInstance();
c.setTime(dateTime);
return c.get(Calendar.YEAR);
}
/**
* 获取月份(第几月)
*
* @param dateTime
* @return
*/
public static int getMonth(Date dateTime)
{
Calendar c = Calendar.getInstance();
c.setTime(dateTime);
return c.get(Calendar.MONTH) + 1;
}
/**
* 获取季度(第几季度)
*
* @param dateTime
* @return
*/
public static int getQuarter(Date dateTime)
{
int month = getMonth(dateTime);
return (month -1 + 3)/3;
}
public static void main(String[] args)
{
long current = System.currentTimeMillis();// 当前时间毫秒数
long zero = current / (1000 * 3600 * 24) * (1000 * 3600 * 24)
- TimeZone.getDefault().getRawOffset();// 今天零点零分零秒的毫秒数
long twelve = zero + 24 * 60 * 60 * 1000;// 今天23点59分59秒的毫秒数
System.out.println(getFirstDate("2012-02-06", "yyyy-MM-dd"));
System.out.println(new Date(zero));// 今天零点零分零秒
System.out.println(new Date(twelve));// 今天23点59分59秒
System.out.println(getDateBefore(new Date(), 30));
System.out.println(getDateFromDateTimeWithoutSeparator("20170627205549"));
}
}
Java操作Date的工具类
猜你喜欢
转载自blog.csdn.net/SicongFu/article/details/77374045
今日推荐
周排行