package com.qxueyou.scc.base.util;
|
|
/**
|
* 记录项目管理部分核心的数据库字典信息;基础操作Form
|
*
|
* @author 邓志永
|
* @since JDK1.6
|
* @history 2014-11-28 邓志永 新建
|
*/
|
import java.sql.Timestamp;
|
import java.text.ParseException;
|
import java.text.SimpleDateFormat;
|
import java.util.Calendar;
|
import java.util.Date;
|
import java.util.GregorianCalendar;
|
import java.util.Locale;
|
|
import org.apache.commons.lang3.StringUtils;
|
|
public class DateUtils {
|
|
|
/**
|
* 根据格式获得日期字符串
|
*
|
* @param sFormat
|
* @return
|
*/
|
public String getDateStr(String sFormat) {
|
Calendar tCal = Calendar.getInstance();
|
Timestamp ts = new Timestamp(tCal.getTime().getTime());
|
java.util.Date date = new java.util.Date(ts.getTime());
|
SimpleDateFormat formatter = new SimpleDateFormat(sFormat, Locale.CHINA);
|
return formatter.format(date);
|
}
|
|
/**
|
* 根据给定格式获取特定时间的格式化显示
|
*
|
* @param ts
|
* @param sFormat
|
* @return
|
*/
|
public String getDateFormat(Timestamp ts, String sFormat) {
|
Date date = new Date(ts.getTime());
|
SimpleDateFormat formatter = new SimpleDateFormat(sFormat, Locale.CHINA);
|
return formatter.format(date);
|
}
|
|
/**
|
* 格式化日期
|
*
|
* @param ts
|
* @return
|
*/
|
public String getSDate(Timestamp ts) {
|
Date date = new Date(ts.getTime());
|
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd", Locale.CHINA);
|
return formatter.format(date);
|
}
|
|
/**
|
* 将String类型的日期转换为时间
|
*
|
* @param dt
|
* @return
|
*/
|
public Timestamp getTs(String dt) {
|
Date date = java.sql.Date.valueOf(dt);
|
Calendar tCal = Calendar.getInstance();
|
tCal.setTime(date);
|
return new Timestamp(tCal.getTime().getTime());
|
}
|
|
/**
|
* 建议获得短日期的处理方式 例如: getShortDate(2004-10-10 10:10:10.123) = 2004-10-10
|
*
|
* @param dt
|
* @return
|
*/
|
public String getShortDate(String dt) {
|
try {
|
return dt.substring(0, dt.indexOf(' '));
|
} catch (Exception e) {
|
return dt;
|
}
|
}
|
|
/**
|
* 取得当前日期时间
|
*
|
* @return
|
*/
|
public Timestamp getCurrDateTime() {
|
Calendar tCal = Calendar.getInstance();
|
return new Timestamp(tCal.getTime().getTime());
|
}
|
|
/**
|
* 取得当前日期时间 毫秒为0
|
*
|
* @return
|
*/
|
public static Timestamp getCurrTime() {
|
Calendar tCal = Calendar.getInstance();
|
tCal.set(Calendar.MILLISECOND, 0);
|
return new Timestamp(tCal.getTime().getTime());
|
}
|
|
/**
|
* 获得最常见的日期格式内容 : 年-月-日 小时-分钟-秒
|
*
|
* @param ts
|
* @return
|
*/
|
public String getSDateTime(Timestamp ts) {
|
return getDateFormat(ts, "yyyy-MM-dd HH:mm:ss");
|
}
|
|
/* 格式化日期 */
|
public String getSTime(Timestamp ts) {
|
return getDateFormat(ts, "HH:mm:ss");
|
}
|
|
/**
|
* 获取当天的日期
|
*
|
* @return
|
*/
|
public final static String getToday() {
|
java.sql.Timestamp ts = new java.sql.Timestamp(System.currentTimeMillis());
|
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd", Locale.CHINA);
|
return formatter.format(ts);
|
|
}
|
|
// 根据时间获得随机数
|
public String getRnd() {
|
Calendar tCal = Calendar.getInstance();
|
Timestamp ts = new Timestamp(tCal.getTime().getTime());
|
java.util.Date date = new java.util.Date(ts.getTime());
|
SimpleDateFormat formatter = new SimpleDateFormat("yyyyMMddhhmmss", Locale.CHINA);
|
String tmpStr = formatter.format(date) + Math.round(Math.random() * 1000 + 1);
|
|
return tmpStr;
|
}
|
|
/**
|
* 计算日期之间的差值 2004-3-25 增加
|
*
|
* @param dt1
|
* @param dt2
|
* @return
|
*/
|
public int dateDiff(Timestamp dt1, Timestamp dt2) {
|
long ldate1 = dt1.getTime();
|
long ldate2 = dt2.getTime();
|
return (int) ((ldate2 - ldate1) / (1000 * 60 * 60 * 24));
|
}
|
|
/**
|
* 计算分钟
|
*
|
* @param dt1
|
* @param dt2
|
* @return
|
*/
|
public int minuteDiff(Timestamp dt1, Timestamp dt2) {
|
long ldate1 = dt1.getTime();
|
long ldate2 = dt2.getTime();
|
return (int) ((ldate2 - ldate1) / (1000 * 60));
|
}
|
|
/**
|
* 获取明天的日期
|
*
|
* @return
|
*/
|
public String getTomorrow() {
|
return getNextDay(getToday());
|
}
|
|
/**
|
* 获得当前日期的下一天
|
*
|
* @param date
|
* @return
|
*/
|
public String getNextDay(String date) {
|
if (StringUtils.isBlank(date)) {
|
return "";
|
}
|
SimpleDateFormat f = new SimpleDateFormat("yyyy-MM-dd", Locale.CHINA);
|
Calendar calendar = Calendar.getInstance();
|
try {
|
calendar.setTime(f.parse(date));
|
} catch (ParseException ex) {
|
return date;
|
}
|
calendar.add(5, 1);
|
return f.format(calendar.getTime());
|
}
|
|
/**
|
* LST num为正:当前日期后num天是返回值 num为负:当前日期前num天是返回值 返回的日期的格式:yyyy-MM-dd
|
*/
|
public static String getTheDay(int num) {
|
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd", Locale.CHINA);
|
GregorianCalendar gc = new GregorianCalendar();
|
gc.add(GregorianCalendar.DATE, num);
|
Date theday = gc.getTime();
|
return sdf.format(theday);
|
}
|
|
/**
|
* 将日期由String转换为Date类型
|
*
|
* @param date
|
* @return
|
* @throws ParseException
|
*/
|
public static Date convertStringToDate(String sdate) throws ParseException {
|
String date = sdate;
|
if (StringUtils.isBlank(date)) {
|
date = getToday();
|
}
|
|
SimpleDateFormat objDateFormat = new SimpleDateFormat("yyyy-MM-dd", Locale.CHINA);
|
Date objDate = objDateFormat.parse(date);
|
|
return objDate;
|
}
|
|
/**
|
* 将日期由String转换为Date类型
|
*
|
* @param date
|
* @param format
|
* @return
|
* @throws ParseException
|
*/
|
public static Date convertStringToDate(String sdate, String format) throws ParseException {
|
String date = sdate;
|
SimpleDateFormat objDateFormat = new SimpleDateFormat(format, Locale.CHINA);
|
if (StringUtils.isBlank(date)) {
|
java.sql.Timestamp ts = new java.sql.Timestamp(System.currentTimeMillis());
|
date = objDateFormat.format(ts);
|
}
|
|
Date objDate = objDateFormat.parse(date);
|
|
return objDate;
|
}
|
|
|
/**
|
* 将日期由yyyy年MM月String转换为Date类型
|
*
|
* @param date
|
* @return
|
* @throws ParseException
|
*/
|
public static Date convertStringToDateCh(String sdate) throws ParseException {
|
String date = sdate;
|
SimpleDateFormat objDateFormat = new SimpleDateFormat("yyyy年MM月", Locale.CHINA);
|
|
if (StringUtils.isBlank(date)) {
|
java.sql.Timestamp ts = new java.sql.Timestamp(System.currentTimeMillis());
|
date = objDateFormat.format(ts);
|
}
|
|
Date objDate = objDateFormat.parse(date);
|
|
return objDate;
|
}
|
|
/**
|
* 取得指定年月的第一天
|
* @param year
|
* @param month
|
* @return
|
*/
|
public static String getLastDayOfMonthToString(int year, int month) {
|
Calendar cal = Calendar.getInstance();
|
cal.set(Calendar.YEAR, year);
|
cal.set(Calendar.MONTH, month - 1);
|
cal.set(Calendar.DAY_OF_MONTH,cal.getActualMaximum(Calendar.DATE));
|
return new SimpleDateFormat( "yyyy-MM-dd", Locale.CHINA).format(cal.getTime());
|
}
|
|
/**
|
* 取得指定年月的最后一天
|
* @param year
|
* @param month
|
* @return
|
*/
|
public static String getFirstDayOfMonthToString(int year, int month) {
|
Calendar cal = Calendar.getInstance();
|
cal.set(Calendar.YEAR, year);
|
cal.set(Calendar.MONTH, month - 1);
|
cal.set(Calendar.DAY_OF_MONTH,cal.getMinimum(Calendar.DATE));
|
return new SimpleDateFormat( "yyyy-MM-dd", Locale.CHINA).format(cal.getTime());
|
}
|
|
/**
|
* 取得指定年月的第一天
|
* @param year
|
* @param month
|
* @return
|
*/
|
public static Date getLastDayOfMonthToDate(int year, int month) {
|
Calendar cal = Calendar.getInstance();
|
cal.set(Calendar.YEAR, year);
|
cal.set(Calendar.MONTH, month - 1);
|
cal.set(Calendar.DAY_OF_MONTH,cal.getActualMaximum(Calendar.DATE));
|
return cal.getTime() ;
|
}
|
|
/**
|
* 取得指定年月的最后一天
|
* @param year
|
* @param month
|
* @return
|
*/
|
public static Date getFirstDayOfMonthToDate(int year, int month) {
|
Calendar cal = Calendar.getInstance();
|
cal.set(Calendar.YEAR, year);
|
cal.set(Calendar.MONTH, month - 1);
|
cal.set(Calendar.DAY_OF_MONTH,cal.getMinimum(Calendar.DATE));
|
return cal.getTime();
|
}
|
|
/**
|
* 得到一段时间内有多少周
|
* @param startTime
|
* @param endTime
|
* @return
|
*/
|
public static int getWeekCounts(Date startTime,Date endTime){
|
|
Calendar c_begin = Calendar.getInstance();
|
Calendar c_end = Calendar.getInstance();
|
c_begin.setTime(startTime);
|
c_end.setTime(endTime);
|
|
int count = 1;
|
|
while(c_begin.before(c_end)){
|
if(c_begin.get(Calendar.DAY_OF_WEEK)==Calendar.SUNDAY){
|
count++;
|
}
|
c_begin.add(Calendar.DAY_OF_YEAR, 1);
|
}
|
|
return count;
|
}
|
|
/**
|
* 得到日期的年
|
* @param date
|
* @return
|
*/
|
public static int getYearInDate(Date date){
|
Calendar cal = Calendar.getInstance();
|
cal.setTime(date);
|
return cal.get(Calendar.YEAR);
|
|
}
|
|
/**
|
* 当前时间处于一段时间的第几周
|
* @param startTime
|
* @param endTime
|
* @return
|
*/
|
public static int getWeekIndex(Date startTime,Date endTime){
|
|
Calendar begin = Calendar.getInstance();
|
Calendar end = Calendar.getInstance();
|
begin.setTime(startTime);
|
end.setTime(endTime);
|
|
int count = 1;
|
|
Calendar now = Calendar.getInstance();
|
|
while(begin.before(end)){
|
|
if(begin.get(Calendar.YEAR) == now.get(Calendar.YEAR)
|
&& begin.get(Calendar.MONTH) == now.get(Calendar.MONTH)
|
&& begin.get(Calendar.DAY_OF_MONTH) == now.get(Calendar.DAY_OF_MONTH)){
|
return count ;
|
}
|
|
|
if(begin.get(Calendar.DAY_OF_WEEK)==Calendar.SUNDAY){
|
count++;
|
}
|
begin.add(Calendar.DAY_OF_YEAR, 1);
|
}
|
|
return count;
|
}
|
|
/**
|
* 指定时间处于一段时间的第几周
|
* @param startTime
|
* @param endTime
|
* @return
|
*/
|
public static int getSpecifyWeekIndex(Date startTime,Date endTime,Date specifyDate){
|
|
Calendar begin = Calendar.getInstance();
|
Calendar end = Calendar.getInstance();
|
begin.setTime(startTime);
|
end.setTime(endTime);
|
|
int count = 1;
|
|
Calendar specify = Calendar.getInstance();
|
specify.setTime(specifyDate);
|
|
while(begin.before(end)){
|
|
if(begin.get(Calendar.YEAR) == specify.get(Calendar.YEAR)
|
&& begin.get(Calendar.MONTH) == specify.get(Calendar.MONTH)
|
&& begin.get(Calendar.DAY_OF_MONTH) == specify.get(Calendar.DAY_OF_MONTH)){
|
return count ;
|
}
|
|
if(begin.get(Calendar.DAY_OF_WEEK)==Calendar.SUNDAY){
|
count++;
|
}
|
begin.add(Calendar.DAY_OF_YEAR, 1);
|
}
|
|
return count;
|
}
|
|
}
|