package com.fastrise.fastdev.base.utils.common;
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import org.springframework.util.Assert;
/**
* 日期工具类
*/
public class DateUtils extends org.apache.commons.lang.time.DateUtils {
/**
* 返回当前时间
*
* @return 返回当前时间
*/
public static Date getCurrentDateTime() {
java.util.Calendar calNow = java.util.Calendar.getInstance();
java.util.Date dtNow = calNow.getTime();
return dtNow;
}
/**
* @return 返回今天日期,时间部分为0。例如:2006-4-8 00:00:00
*/
public static Date getToday() {
return truncate(new Date(), Calendar.DATE);
}
/**
* @return 返回今天日期,时间部分为23:59:59.999。例如:2006-4-19 23:59:59.999
*/
public static Date getTodayEnd() {
return getDayEnd(new Date());
}
/**
* @return 返回今年的最初时间。例如:2010-1-1 00:00:00
*/
public static Date getCurrentYearStart(){
return truncate(new Date(), Calendar.YEAR);
}
/**
* 将字符串转换为日期.
* @param dateString 日期字符串
* @param pattern 日期字符串匹配模式 例:yyyy-MM-dd HH:mm:ss
* @return
*/
public static Date convertToDate(String dateString, String pattern) {
try {
DateFormat format = new SimpleDateFormat(pattern);
return format.parse(dateString);
} catch (ParseException e) {
return null;
}
}
/**将Date转换成字符串.
* @param date 时间
* @param pattern 日期字符串匹配模式 例:yyyy-MM-dd HH:mm:ss
*/
public static String DateToString(Date date,String pattern){
DateFormat format = new SimpleDateFormat(pattern);
return format.format(date);
}
/**将Date转换成字符串.
* @param date 时间
* @param pattern 日期字符串匹配模式 例:yyyy-MM-dd
*/
public static String DateToDateString(Date date){
if (date==null) {
return null;
}
DateFormat format = new SimpleDateFormat("yyyy-MM-dd");
return format.format(date);
}
/**将Date转换成字符串.日期字符串匹配模式 例:yyyy-MM-dd HH:mm:ss
* @param date 时间
*/
public static String DateToDateTimeString(Date date){
if(null==date)
return null;
DateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
return format.format(date);
}
public static String DateToMonthday(Date date) {
if(null==date)
return null;
DateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm");
return format.format(date);
}
/**
* 将字符串转换为日期.
* @param dateString 日期字符串
* @param pattern 日期字符串匹配模式 例: yyyy-MM-dd HH:mm:ss
* @param locale
* @return
*/
public static Date convertToSqlDate(String dateString, String pattern) {
try {
DateFormat format = new SimpleDateFormat(pattern);
return format.parse(dateString);
} catch (ParseException e) {
return null;
}
}
/**
* 将字符串转换为日期(不包括时间)
* @param dateString "yyyy-MM-dd"格式的日期字符串
* @return 日期
*/
public static Date convertToDate(String dateString) {
try{
return FormatConstants.DATE_FORMAT.parse(dateString);
}catch (ParseException e) {
return null;
}
}
/**
* 检查字符串是否为日期格式yyyy-MM-dd
* @param dateString
* @return true=是;false=否
*/
public static boolean checkDateString(String dateString) {
return (convertToDate(dateString)!=null);
}
/**
* 将字符串转换为日期(包括时间)
* @param dateString "yyyy-MM-dd HH:mm:ss"格式的日期字符串
* @return 日期时间
*/
public static Date convertToDateTime(String dateTimeString) {
try{
return FormatConstants.DATE_TIME_FORMAT.parse(dateTimeString);
}catch (ParseException e) {
return null;
}
}
/**
* 检查字符串是否为日期时间格式 例:yyyy-MM-dd HH:mm:ss
* @param dateString
* @return true=是;false=否
*/
public static boolean checkDateTimeString(String dateTimeString) {
return (convertToDateTime(dateTimeString)!=null);
}
/**
* 获取月底
* @param year 年 4位年度
* @param month 月 1~12
* @return 月底的Date对象。例如:2006-3-31 23:59:59.999
*/
public static Date getMonthEnd(int year, int month) {
StringBuffer sb = new StringBuffer(10);
Date date;
if (month<12) {
sb.append(Integer.toString(year));
sb.append("-");
sb.append(month+1);
sb.append("-1");
date = convertToDate(sb.toString());
}else{
sb.append(Integer.toString(year+1));
sb.append("-1-1");
date = convertToDate(sb.toString());
}
date.setTime(date.getTime() - 1);
return date;
}
/**
* 获取月底
* @param when 要计算月底的日期
* @return 月底的Date对象。例如:2006-3-31 23:59:59.999
*/
public static Date getMonthEnd(Date when) {
Assert.notNull(when,"date must not be null !");
Calendar calendar = Calendar.getInstance();
calendar.setTime(when);
int year = calendar.get(Calendar.YEAR);
int month = calendar.get(Calendar.MONTH)+1;
return getMonthEnd(year,month);
}
/**
* 获取给定日的最后一刻。
* @param when 给定日
* @return 最后一刻。例如:2006-4-19 23:59:59.999
*/
public static Date getDayEnd(Date when) {
Date date = truncate(when,Calendar.DATE);
date = addDays(date,1);
date.setTime(date.getTime() - 1);
return date;
}
/**
* 获取给定日的第一刻。
* @param when 给定日
* @return 最后一刻。例如:2006-4-19 23:59:59.999
*/
public static Date getDay(Date when) {
Date date = truncate(when,Calendar.DATE);
date = addDays(date,-1);
date.setTime(date.getTime() + 1);
return date;
}
/**
* 日期加法
* @param when 被计算的日期
* @param field the time field. 在Calendar中定义的常数,例如Calendar.DATE
* @param amount 加数
* @return 计算后的日期
*/
public static Date add(Date when, int field, int amount) {
Calendar calendar = Calendar.getInstance();
calendar.setTime(when);
calendar.add(field,amount);
return calendar.getTime();
}
/**
* 计算给定的日期加上给定的天数。
* @param when 给定的日期
* @param amount 给定的天数
* @return 计算后的日期
*/
public static Date addDays(Date when, int amount) {
return add(when,Calendar.DAY_OF_YEAR,amount);
}
/**
* 计算给定的日期加上给定的月数。
* @param when 给定的日期
* @param amount 给定的月数
* @return 计算后的日期
*/
public static Date addMonths(Date when, int amount) {
return add(when,Calendar.MONTH,amount);
}
/**
* 得到当前服务端的日期,格式如:2010年11月11日 星期四
* @return
*/
public static String getCurrentDay(){
String dayNames[] = { "星期日", "星期一", "星期二", "星期三", "星期四", "星期五","星期六" };
Calendar calendar = Calendar.getInstance();
Date date = new Date();
calendar.setTime(date);
int dayOfWeek = calendar.get(Calendar.DAY_OF_WEEK)-1;
if(dayOfWeek <0)dayOfWeek=0;
return DateToString(date,"yyyy年MM月dd日") + " " + dayNames[dayOfWeek];
}
/**
* 计算两个日期相差的天数
* @param latDate
* 被减的日期
* @param preDate
* 减去的日期
* @return
*/
public static long getDifferDays(Date latDate, Date preDate){
long differTime = latDate.getTime() - preDate.getTime();
return differTime/(1000*60*60*24);
}
/**
* 计算两个时间相差的小时数
* @param latDate
* 被减的时间
* @param preDate
* 减去的时间
* @return
*/
public static double getDifferHours(Date latDate, Date preDate){
long differTime = latDate.getTime() - preDate.getTime();
return (double)differTime/(1000*60*60);
}
}
日期工具类
最新推荐文章于 2024-04-18 14:56:31 发布