/**
* DateUtils.java
*/
package com.aspire.common.util;
import java.math.BigDecimal;
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.TimeZone;
/**
* <p>
* Title: 日期操作类
* </p>
* <p>
* Description: 完成一些对日期的计算工作
* </p>
* <p>
* Copyright: Copyright (c) 2007
* </p>
* <p>
* Company: aspire technology
* </p>
*
* @author zengjin
* @version 1.0.0.0
* @CheckItem@ NEW-zengjin-20070110-patch001-ADD40 新增
*/
public class DateUtils {
/**
* 显示日期的格式,yyyy-MM-dd
*/
public static final String DATE_FORMAT = "yyyy-MM-dd";
/**
* 显示日期的格式,yyyy-MM-dd HH:mm:ss
*/
public static final String TIMEF_FORMAT = "yyyy-MM-dd HH:mm:ss";
/**
* 显示日期的格式,yyyy年MM月dd日HH时mm分ss秒
*/
public static final String ZHCN_TIME_FORMAT = "yyyy年MM月dd日HH时mm分ss秒";
/**
* 显示日期的格式,yyyyMMddHHmmss
*/
public static final String TIME_STR_FORMAT = "yyyyMMddHHmmss";
/**
* 显示日期的格式,yyyyMMdd
*/
public static final String DATE_STR_FORMAT = "yyyyMMdd";
/**
* 显示日期的格式,yyyyMMdd
*/
public static final String DATE_HH_STR_FORMAT = "yyyy-MM-dd-HH";
public static final String DATE_HH_STR_SSS_FORMAT = "yyyy/MM/dd HH:mm:ss:SSS";
/**
* DateFormat,格式:yyyy-MM-dd
*/
private static DateFormat dateFormat;
/**
* DateFormat,格式:yyyy-MM-dd HH:mm:ss
*/
private static DateFormat dateTimeFormat;
/**
* DateFormat,格式:yyyyMMddHHmmss
*/
private static DateFormat dateTimeStrFormat;
/**
* DateFormat,格式:yyyy年MM月dd日HH时mm分ss秒
*/
private static DateFormat zhcnDateTimeStrFormat;
static {
dateFormat = new SimpleDateFormat(DATE_FORMAT);
dateTimeFormat = new SimpleDateFormat(TIMEF_FORMAT);
dateTimeStrFormat = new SimpleDateFormat(TIME_STR_FORMAT);
zhcnDateTimeStrFormat = new SimpleDateFormat(ZHCN_TIME_FORMAT);
}
/**
* 获取当前时间在+-n分钟后的字符串时间
*
* @param n
* int
* @return String
*/
public static String getTimebyMinAfter(int n) {
Calendar now = Calendar.getInstance(TimeZone.getDefault());
now.add(Calendar.MINUTE, n);
return (dateTimeFormat.format(now.getTime()));
}
/**
* 获取当前时间在+-n秒后的字符串时间
*
* @param n
* int
* @return String
*/
public static String getTimebySecAfter(int n) {
Calendar now = Calendar.getInstance(TimeZone.getDefault());
now.add(Calendar.SECOND, n);
return (dateTimeFormat.format(now.getTime()));
}
/**
* 获取定义的DateFormat格式
*
* @param formatStr
* @return
*/
private static DateFormat getDateFormat(String formatStr) {
if (formatStr.equalsIgnoreCase(DATE_FORMAT)) {
return dateFormat;
} else if (formatStr.equalsIgnoreCase(TIMEF_FORMAT)) {
return dateTimeFormat;
} else {
return new SimpleDateFormat(formatStr);
}
}
/**
* 将Date转换成字符串“yyyy-mm-dd hh:mm:ss”的字符串
*
* @param date
* 日期
* @return String 字符串
*/
public static String dateToDateString(Date date) {
return dateToDateString(date, TIMEF_FORMAT);
}
/**
* 将Date转换成formatStr格式的字符串
*
* @param date
* @param formatStr
* @return
*/
public static String dateToDateString(Date date, String formatStr) {
DateFormat df = getDateFormat(formatStr);
return df.format(date);
}
/**
* 将小时数换算成返回以毫秒为单位的时间
*
* @param hours
* @return
*/
public static long getMicroSec(BigDecimal hours) {
BigDecimal bd;
bd = hours.multiply(new BigDecimal(3600 * 1000));
return bd.longValue();
}
/**
* 获取今天的日期,格式自定
*
* @param pattern -
* 设定显示格式
* @return String - 返回今天的日期
*/
public static String getToday(String pattern) {
Calendar now = Calendar.getInstance(TimeZone.getDefault());
DateFormat sdf = getDateFormat(pattern);
sdf.setTimeZone(TimeZone.getDefault());
return (sdf.format(now.getTime()));
}
// 得到系统当前的分钟数,如当前时间是上午12:00,系统当前的分钟数就是12*60
public static int getCurrentMinutes() {
Calendar now = Calendar.getInstance(TimeZone.getDefault());
int iMin = now.get(Calendar.HOUR_OF_DAY) * 60
+ now.get(Calendar.MINUTE);
return iMin;
}
/**
* 获取当前日期时间yyyy年MM月dd日HH时mm分ss秒的形式
*
* @return 当前日期时间yyyy年MM月dd日HH时mm分ss秒的形式
*/
public static String getCurZhCNDateTime() {
return dateToDateString(new Date(), ZHCN_TIME_FORMAT);
}
/**
* 获取当前时间 yyyyMMddHHmmss 的格式
* */
public static String getCurTime24(){
return dateToDateString(new Date(),TIME_STR_FORMAT);
}
/**
* @return 得到本月月份 如09
*/
public static String getMonth() {
Calendar now = Calendar.getInstance();
int month = now.get(Calendar.MONTH) + 1;
String monStr = String.valueOf(month);
// 对于10月份以下的月份,加"0"在前面
if (month < 10)
monStr = "0" + monStr;
return monStr;
}
/**
* 根据失效时间判断是否依然有效
*
* @param expireTime
* 失效时间的字符串形式,格式要求:yyMMddHHmmss
* @return true:失效 false:没有失效
* @throws ParseException
*/
public static boolean isTimeExpired(String expireTime)
throws ParseException {
boolean ret = false;
// SimpleDateFormat不是线程安全的,所以每次调用new一个新的对象
Date date = new SimpleDateFormat(TIME_STR_FORMAT).parse(expireTime);
Calendar expire = Calendar.getInstance();
expire.setTime(date);
Calendar now = Calendar.getInstance();
// 将毫秒字段设为0,保持精度一致性
now.set(Calendar.MILLISECOND, 0);
if (now.after(expire)) {
ret = true;
}
return ret;
}
/**
* 根据开始时间和可用时间计算出失效时间
*
* @param startTime
* 开始时间
* @param availableTime
* 有效时长(单位:秒)
* @return 失效时间
* @throws ParseException
*/
public static String getExpireTimeByCalculate(Date startTime,
int availableTime) {
Calendar expire = Calendar.getInstance();
// 设置为开始时间
expire.setTime(startTime);
// 开始时间向后有效时长秒得到失效时间
expire.add(Calendar.SECOND, availableTime);
// 返回失效时间字符串
// SimpleDateFormat不是线程安全的,所以每次调用new一个新的对象
return new SimpleDateFormat(TIME_STR_FORMAT).format(expire.getTime());
}
/**
* 将Date转换为yyMMddHHmmss的形式
*
* @param date
* @return 日期的字符串形式,格式:yyMMddHHmmss
*/
public static String convertDateToString(Date date) {
return new SimpleDateFormat(TIME_STR_FORMAT).format(date);
}
/**
* 将yyMMddHHmmss形式的字符串转换成Date的形式
*
* @param date
* yyMMddHHmmss形式的日期字符串
* @return Date对象
* @throws ParseException
*/
public static Date convertStringToDate(String date) throws ParseException {
return new SimpleDateFormat(TIME_STR_FORMAT).parse(date);
}
/**
* @param date
* yyyyMMddHHmmss格式的日期字符转换为yyyy年MM月dd日HH时mm分ss秒格式的字符串
* @return yyyy年MM月dd日HH时mm分ss秒格式的日期字符串
* @throws ParseException
*/
public static String convertStringToZhCN(String date) throws ParseException {
return zhcnDateTimeStrFormat.format(dateTimeStrFormat.parse(date));
}
// ### add by xukejun on v1.5.0.0.006 start ###
/**
* 获取昨日日期 返回格式:yyyy-MM-dd
*/
public static String getYesterdayDate() {
// 获取昨日的日期
Calendar cal = Calendar.getInstance();
cal.add(Calendar.DAY_OF_MONTH, -1);
Date yesterday = cal.getTime();
return new SimpleDateFormat(DATE_FORMAT).format(yesterday);
}
// ### add by xukejun on v1.5.0.0.006 end ###
/**
* @param dateString yyyy/MM/dd HH:mm:ss
* @return
* @throws ParseException
*/
public static String convertStringToString(String dateString) throws ParseException{
SimpleDateFormat sdf=new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
Date date = sdf.parse(dateString);
return convertDateToString(date);
}
/**
* 将yyMMddHHmmss形式的字符串转换成Date的形式
*
* @param date
* yyMMddHHmmss形式的日期字符串
* @return Date对象
* @throws ParseException
*/
public static Date convertStringToDate(String date,String formatString) throws ParseException {
return new SimpleDateFormat(formatString).parse(date);
}
/**
* 获得延迟后的日期
* @param src(基于日期)
* @param count(延迟数)
* @param type(延迟类型:Y--年;M--月;D--天;H--小时)
* @return
* @author x_shengqiang
* @date 2010-1-4
*/
public static Date getDelayDate(Date src,int count,String type)throws ParseException{
Calendar cal=Calendar.getInstance();
cal.setTime(src);
if("Y".equals(type)){
cal.add(Calendar.YEAR, count);
}else if("M".equals(type)){
cal.add(Calendar.MONTH, count);
}else if("D".equals(type)){
cal.add(Calendar.DATE, count);
}else if("H".equals(type)){
cal.add(Calendar.HOUR, count);
}
return new SimpleDateFormat(DATE_FORMAT).parse((new SimpleDateFormat(DATE_FORMAT).format(cal.getTime())));
}
/**
* 获取月份第一天
* @param src
* @return
* @author x_shengqiang
* @date 2010-1-4
*/
public static Date getMonthFirstDate(Date src)throws ParseException{
Calendar cal=Calendar.getInstance();
cal.setTime(src);
cal.set(Calendar.DATE, 1);
return new SimpleDateFormat(DATE_FORMAT).parse((new SimpleDateFormat(DATE_FORMAT).format(cal.getTime())));
}
/**
* 获取月份最后一天
* @param src
* @return
* @author x_shengqiang
* @date 2010-1-4
*/
public static Date getLastDayOfMonth(Date date) {
Calendar cal = Calendar.getInstance();
cal.setTime(date);
cal.set(Calendar.DAY_OF_MONTH, 1);
cal.roll(Calendar.DAY_OF_MONTH, -1);
return cal.getTime();
}
/**
* 获得yyyy-MM-dd格式的日期
* @param src
* @param pattern
* @return
* @author x_shengqiang
* @date 2010-1-5
*/
public static Date getPatternDate(String src)throws ParseException{
return new SimpleDateFormat(DATE_FORMAT).parse(src);
}
}