package bl_new.xmgl.comm;
import java.math.BigDecimal;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;
public class DateTool {
/**
* @description 获取当前系统时间
* @author 野绅士
* @param formate
* @return
* @date 2014-5-21
*/
public static String getCurrDate(String formate){
SimpleDateFormat sf = new SimpleDateFormat(formate);
return sf.format(new Date());
}
public static Calendar getCalendar(Date date)
{
Calendar cal = Calendar.getInstance();
cal.setTime(date);
return cal;
}
/**
* 得到当前的日期时间
*
* @param pattern
* 时间样式
* @return 返回当前日期的字符串
*/
public static String getCurrentDate(String pattern)
{
java.util.Date date = new java.util.Date();
String s = dateToStr(date, pattern);
return s;
}
/**
* 把一个字符串(一定要保证是正确日期)转化成Java的Date类 如果失败返回null 如果格式不支持请将格式增加到datePattern中
*
* @param source
* 传入的日期字符串
* @return Date
*/
public static Date parseDate(String source)
{
if (source == null || source.length() == 0)
return null;
String[] datePattern =
{ "yyyy-MM-dd HH:mm:ss", "yyyy-MM-dd", "HH:mm:ss" };
Date date = null;
for (int i = 0; i < datePattern.length; i++)
{
date = parseDate(source, datePattern[i]);
if (date != null)
break;
}
datePattern = null;
return date;
}
public static java.sql.Date parseSqlDate(String pattern){
Date date = parseDate(pattern);
java.sql.Date returnV;
returnV = new java.sql.Date(date.getTime());
return returnV;
}
/**
* 把一个指定格式的日期字符串转化成Java的Date类 如果失败返回null
*
* @param source
* 传入的日期字符串
* @param format
* 日期的格式
* @return Date
*/
public static Date parseDate(String dateStr, String format)
{
SimpleDateFormat dateFormat = new SimpleDateFormat(format);
Date date = null;
try
{
date = dateFormat.parse(dateStr);
} catch (ParseException e)
{
// do nothing.
}
return date;
}
/**
* 返回两个日期的天数差值
*
* @param end
* 结束日期
* @param start
* 开始日期
* @return
*/
public static int diffDate(java.util.Date end, java.util.Date start)
{
return (int) (getMillis(end) / (24 * 3600 * 1000) - getMillis(start)
/ (24 * 3600 * 1000));
}
/**
* 返回两个日期的分钟
*
* @param end
* 结束日期
* @param start
* 开始日期
* @return
*/
public static long diffSecond(Date end, Date start)
{
return (getMillis(end) - getMillis(start)) / 1000;
}
/**
* 返回两个日期的秒数
*
* @param end
* 结束日期
* @param start
* 开始日期
* @return
*/
public static long diffMinute(Date end, Date start)
{
return (getMillis(end) - getMillis(start)) / (1000*60);
}
/**
* 返回UTC milliseconds
*
* @param date
* 日期
* @return
*/
public static long getMillis(java.util.Date date)
{
java.util.Calendar c = java.util.Calendar.getInstance();
c.setTime(date);
return c.getTimeInMillis();
}
/**
* 返回yyyy-MM-dd HH:mm:ss格式的当前日期
*
* @return
*/
public static String getNow()
{
Date now = new Date();
return formatDateTime(now);
}
public static Date getDateNow()
{
Date now = new Date();
return now;
}
/**
* 返回指定格式的当前日期
*
* @param pattern格式
* @return
*/
public static String getNow(String pattern)
{
Date now = new Date();
return formatDate(now, pattern);
}
/**
* 把Java时间类型的字符串格式化为指定格式的字符串
*
* @param date
* 待转化的字符串
* @return 返回格式化好的字符串.
*/
public static String formatDate(String dateStr, String pattern)
{
Date date = parseDate(dateStr);
return formatDate(date, pattern);
}
/**
* 把Java时间类型Date按"HH:mm:ss"格式化为字符串
*
* @param date
* 待转化的Date
* @return 返回格式化好的字符串.
*/
public static String formatTime(Date date)
{
String pattern = "HH:mm:ss";
return formatDate(date, pattern);
}
/**
* 把Java时间类型Date按"yyyy-MM-dd"格式化为字符串
*
* @param date
* 待转化的Date
* @return 返回格式化好的字符串.
*/
public static String formatDate(Date date)
{
String pattern = "yyyy-MM-dd";
return formatDate(date, pattern);
}
/**
* 把Java时间类型Date按"yyyy-MM-dd HH:mm:ss"格式化为字符串
*
* @param date
* 待转化的Date
* @return 返回格式化好的字符串.
*/
public static String formatDateTime(Date date)
{
String pattern = "yyyy-MM-dd HH:mm:ss";
return formatDate(date, pattern);
}
/**
* 把Java时间类型Date按指定的样式格式化为字符串
*
* @param date
* 待转化的Date
* @param pattern
* 转化的样式
* @return 返回格式化好的字符串.
*/
public static String formatDate(Date date, String pattern)
{
String dateTimePattern = pattern;
if (date == null)
{
if (dateTimePattern.length() > 2
&& dateTimePattern.substring(dateTimePattern.length() - 2)
.equals("_e"))
{
dateTimePattern = dateTimePattern.replaceAll("(yy|YY){1,2}",
" ");
dateTimePattern = dateTimePattern
.replaceAll("(M){1,2}", " ");
dateTimePattern = dateTimePattern.replaceAll("(d|D){1,2}",
" ");
dateTimePattern = dateTimePattern.replaceAll("(h|H){1,2}",
" ");
dateTimePattern = dateTimePattern
.replaceAll("(m){1,2}", " ");
dateTimePattern = dateTimePattern.replaceAll("(s|S){1,2}",
" ");
return dateTimePattern.substring(0,
dateTimePattern.length() - 2);
} else
{
return "";
}
} else
{
if (dateTimePattern.length() > 2
&& dateTimePattern.substring(dateTimePattern.length() - 2)
.equals("_e"))
{
dateTimePattern = dateTimePattern.substring(0, dateTimePattern
.length() - 2);
}
}
if (dateTimePattern == null || dateTimePattern.length() == 0)
return formatDateTime(date);
SimpleDateFormat sdf = new SimpleDateFormat();
try
{
sdf.applyPattern(dateTimePattern);
} catch (IllegalArgumentException exp)
{
sdf.applyPattern("yyyy-MM-dd HH:mm:ss");
}
return sdf.format(date);
}
/**
* 得到当前年份整数
*
* @return 当前的年份
*/
public static int getCurrYear()
{
Calendar cal = Calendar.getInstance();
return cal.get(Calendar.YEAR);
}
/**
* 得到当前的月份整数
*
* @return 当前的月份
*/
public static int getCurrMonth()
{
Calendar cal = Calendar.getInstance();
return cal.get(Calendar.MONTH) + 1;
}
/**
* 得到当前时间的星期
*
* @return 当前所在月的年哪一天
*/
public static String getCurrtWeekDay()
{
Date date = new Date();
String[] weekDays =
{ "星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六" };
Calendar cal = Calendar.getInstance();
cal.setTime(date);
int w = cal.get(Calendar.DAY_OF_WEEK) - 1;
if (w < 0)
w = 0;
return weekDays[w];
}
/**
* 得到当前所在月的那一天整数
*
* @return 当前所在月的年哪一天
*/
public static int getCurrDay()
{
Calendar cal = Calendar.getInstance();
return cal.get(Calendar.DATE);
}
/**
* 取得传入日期是多少周
*
* @param date
* @return 第几周
*/
public static int getWeekOfYear(Date date)
{
Calendar c = new GregorianCalendar();
c.setFirstDayOfWeek(Calendar.MONDAY);
c.setMinimalDaysInFirstWeek(7);
c.setTime(date);
return c.get(Calendar.WEEK_OF_YEAR);
}
/**
* 取得当前日期是多少周
*
* @return 第几周
*/
public static int getWeekOfYear()
{
return getWeekOfYear(new Date());
}
/**
* 得到某一年周的总数
*
* @param year
* @return 某一年周的总数
*/
public static int getMaxWeekNumOfYear(int year)
{
Calendar c = new GregorianCalendar();
c.set(year, Calendar.DECEMBER, 31, 23, 59, 59);
return getWeekOfYear(c.getTime());
}
/**
* 得到某年某周的第一天
*
* @param year
* @param week
* @return 某年某周的第一天
*/
public static Date getFirstDayOfWeek(int year, int week)
{
Calendar c = new GregorianCalendar();
c.set(Calendar.YEAR, year);
c.set(Calendar.MONTH, Calendar.JANUARY);
c.set(Calendar.DATE, 1);
Calendar cal = (GregorianCalendar) c.clone();
cal.add(Calendar.DATE, week * 7);
return getFirstDayOfWeek(cal.getTime());
}
/**
* 功能: 将插入的字符串按格式转换成对应的日期对象
* @param str 字符串
* @param pattern 格式
* @return Date
*/
public static Date StringToDate(String str, String pattern) {
Date dateTime = null;
try {
if (str != null && !str.equals("")) {
SimpleDateFormat formater = new SimpleDateFormat(pattern);
dateTime = formater.parse(str);
}
} catch (Exception ex) {
}
return dateTime;
}
/**
* 得到某年某周的最后一天
*
* @param year
* @param week
* @return 某年某周的最后一天
*/
public static Date getLastDayOfWeek(int year, int week)
{
Calendar c = new GregorianCalendar();
c.set(Calendar.YEAR, year);
c.set(Calendar.MONTH, Calendar.JANUARY);
c.set(Calendar.DATE, 1);
Calendar cal = (GregorianCalendar) c.clone();
cal.add(Calendar.DATE, week * 7);
return getLastDayOfWeek(cal.getTime());
}
/**
* 取得当前日期所在周的第一天
*
* @param date
* @return 当前日期所在周的第一天
*/
public static Date getFirstDayOfWeek(Date date)
{
Calendar c = new GregorianCalendar();
c.setFirstDayOfWeek(Calendar.MONDAY);
c.setTime(date);
c.set(Calendar.DAY_OF_WEEK, c.getFirstDayOfWeek()); // Monday
return c.getTime();
}
/**
* 取得当前日期所在周的最后一天
*
* @param date
* @return 当前日期所在周的最后一天
*/
public static Date getLastDayOfWeek(Date date)
{
Calendar c = new GregorianCalendar();
c.setFirstDayOfWeek(Calendar.MONDAY);
c.setTime(date);
c.set(Calendar.DAY_OF_WEEK, c.getFirstDayOfWeek() + 6); // Sunday
return c.getTime();
}
/**
* 取得某年某月第一周开始日期
*
* @param date
* @return
*/
public static Date getFirstDayOfFirstWeek(int year, int month)
{
Calendar c = Calendar.getInstance();
c.setFirstDayOfWeek(Calendar.MONDAY);
c.set(year, month, 1);
c.set(Calendar.DAY_OF_WEEK_IN_MONTH, 1);
c.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY);
return c.getTime();
}
/**
* 取得昨天日期
*
* @param date
* @return
*/
public static Date getYesterday()
{
Calendar c = new GregorianCalendar();
c.set(Calendar.DATE, c.get(Calendar.DATE) - 1);
Date date = c.getTime();
return date;
}
/**
* 取得明天日期
*
* @param date
* @return
*/
public static Date getTomorrow()
{
Calendar c = new GregorianCalendar();
c.set(Calendar.DATE, c.get(Calendar.DATE) + 1);
Date date = c.getTime();
return date;
}
/**
* 将指定日期的月份减一
*
* @param date
* @return
*/
public static Date getPreMonth(Date date)
{
GregorianCalendar c = new GregorianCalendar();
c.setTime(date);
c.add(Calendar.MONTH, -1);
return c.getTime();
}
/**
* 将指定日期的月份加一
*
* @param date
* @return
*/
public static Date getAddMonth(Date date)
{
GregorianCalendar c = new GregorianCalendar();
c.setTime(date);
c.add(Calendar.MONTH, +1);
return c.getTime();
}
/**
* 将指定日期的月份加一
*
* @param date
* @return
*/
public static String getAddMonthString()
{
Date date = new Date();
GregorianCalendar c = new GregorianCalendar();
c.setTime(date);
c.add(Calendar.MONTH, +1);
return formatDateTime(c.getTime());
}
/**
* 返回季度
*
* @param date
* @return
*/
@SuppressWarnings("deprecation")
public static int getQuarter(Date date)
{
int month = date.getMonth();
if (month < 3)
{
return 1;
} else if (month < 6)
{
return 2;
} else if (month < 9)
{
return 3;
} else
{
return 4;
}
}
/**
* 返回当前季度
* wtc
* @param date
* @return
*/
public static int getCurrentQuarter()
{
java.util.Date date = new java.util.Date();
return getQuarter(date);
}
/**
* 比较两个日期之间相差的天数
*
* @param strDate1
* @param strDate2
* @return
*/
public static int getDayCountByTwoDates(String strDate1, String strDate2)
{
int differ = 0;
try
{
SimpleDateFormat format = new SimpleDateFormat(
"yyyy-MM-dd hh:mm:ss");
Date date1 = format.parse(strDate1);
Date date2 = format.parse(strDate2);
differ = (int) ((date1.getTime() - date2.getTime()) / (24 * 60 * 60 * 1000));
format = null;
} catch (Exception e)
{
differ = -1;
}
return differ;
}
/**
* 比较两个日期之间相差的天数
*
* @param strDate1
* @param strDate2
* @return
*/
public static float getDayCountFloatByTwoDates(String strDate1,
String strDate2)
{
float differ = 0;
try
{
SimpleDateFormat format = new SimpleDateFormat(
"yyyy-MM-dd hh:mm:ss");
Date date1 = format.parse(strDate1);
Date date2 = format.parse(strDate2);
BigDecimal b1 = new BigDecimal(date1.getTime() + "");
BigDecimal b2 = new BigDecimal(date2.getTime() + "");
double b3 = b1.subtract(b2).doubleValue();
BigDecimal b4 = new BigDecimal(b3);
BigDecimal b5 = new BigDecimal((24 * 60 * 60 * 1000) + "");
double result = b4.divide(b5, 10, BigDecimal.ROUND_DOWN)
.doubleValue();
// double result =
// b1.divide(b2,10,BigDecimal.ROUND_DOWN).doubleValue();
differ = Float.parseFloat(result + "");
} catch (Exception e)
{
differ = -1;
}
return differ;
}
/**
* 把Java时间类型Date按指定的样式格式化为字符串
*
* @param date
* 待转化的Date
* @param pattern
* 转化的样式
* @return 返回格式化好的字符串.
*/
public static String dateToStr(java.util.Date date, String pattern)
{
if (date == null)
return "";
String pat = pattern;
if (pat == null || pat.length() == 0)
pat = "yyyy-MM-dd HH:mm:ss";
SimpleDateFormat sdf = new SimpleDateFormat(pat);
return sdf.format(date);
}
}