日期处理

来源:互联网 发布:姜大声 知乎 编辑:程序博客网 时间:2024/06/05 21:55
public class DateTimeUtil {


public static Date getDatabaseDateTime() {


java.text.SimpleDateFormat ss = new java.text.SimpleDateFormat(
"yyyy-MM-dd");
String orderdate = ss.format(new java.util.Date());


Date reDate = new Date();


SimpleDateFormat bartDateFormat = new SimpleDateFormat(
"yyyy-MM-dd HH:mm:ss");
try {
reDate = bartDateFormat.parse(orderdate);
} catch (Exception e) {


}


return reDate;
}

 

 

/**
* 获得当前是某月的第几周
* @param date
* @return int
*/
public static int getWeekByMonth(String date){
int week;
Calendar c = Calendar.getInstance();
c.setTime(stringToDate(date, "yyyy-MM-dd"));
int day_week=c.get(Calendar.DAY_OF_WEEK);
if(day_week==1){//如果是星期天
week=c.get(Calendar.WEEK_OF_MONTH)-1;//获取是本月的第几周
}else{
week=c.get(Calendar.WEEK_OF_MONTH);//获取是本月的第几周
}
//////////第一周从本月第一个周一算起
String firstDay=date.substring(0,7)+"-01";
c.setTime(stringToDate(firstDay, "yyyy-MM-dd"));
day_week=c.get(Calendar.DAY_OF_WEEK);
if(day_week!=1 && day_week!=2){
week=week-1;
}else if(day_week==1 && date.equals(firstDay)){
//week=week-1;
}
return week;
}

/**
* 获得星期几
* @param date
* @return String
*/
public static String getWeeknum(String date){
String[] weeks = { "日", "一", "二", "三", "四", "五", "六" };
int year=Integer.parseInt(date.substring(0,4));
int month=Integer.parseInt(date.substring(5,7));
int day=Integer.parseInt(date.substring(8,10));
Calendar c = Calendar.getInstance();
c.set(Calendar.YEAR, year);
c.set(Calendar.MONTH, month-1);
c.set(Calendar.DATE, day);
// int week = c.get(Calendar.WEEK_OF_MONTH);//获取是本月的第几周
int weekday = c.get(Calendar.DAY_OF_WEEK);//获致是本周的第几天地, 1代表星期天...7代表星期六
return weeks[weekday-1];
}

/**
 * 
 * @param year          年份
 * @param month         月份
 * @param weekOfMonth   这个月的第几周
 * @param dayOfWeek     星期几
 * @return String
 */
public static String weekdatetodata(int year,int month,int weekOfMonth,int dayOfWeek){
 Calendar c = Calendar.getInstance();
 //计算出 x年 y月 1号 是星期几
 c.set(year, month-1, 1);
 
 //如果i_week_day =1 的话 实际上是周日  
 int i_week_day = c.get(Calendar.DAY_OF_WEEK);
 int sumDay = 0;
 //dayOfWeek+1 就是星期几(星期日 为 1)
 if(i_week_day == 1){
  sumDay = (weekOfMonth-1)*7 + dayOfWeek+1;//第一周从第一个星期一开始
//   sumDay = (weekOfMonth-2)*7 + dayOfWeek+1;//第一周从本月第一天开始
 }else{
  sumDay = 7-i_week_day+1 +  (weekOfMonth-1)*7 + dayOfWeek +1;//第一周从第一个星期一开始
//   sumDay = 7-i_week_day+1 +  (weekOfMonth-2)*7 + dayOfWeek +1;//第一周从本月第一天开始
 }
 //在1号的基础上加上相应的天数
 c.set(Calendar.DATE,  sumDay);
 SimpleDateFormat sf2 = new SimpleDateFormat("yyyy-MM-dd");
 return sf2.format(c.getTime());



/**
* 格式化时间 把相应时间转化为相应格式
* @param date
* @param pattern
* @return Date
*/
public static Date formatDate(Date date, String pattern) {
Date reDate = new Date();
if (date != null) {
java.text.SimpleDateFormat ss = new java.text.SimpleDateFormat(
pattern);
String orderdate = ss.format(date);
// reDate = new Date();
try {
reDate = java.sql.Date.valueOf(orderdate);
} catch (Exception e) {


}
}
else
{
java.text.SimpleDateFormat ss = new java.text.SimpleDateFormat(
pattern);
String orderdate = ss.format(reDate);
// reDate = new Date();
try {
reDate = java.sql.Date.valueOf(orderdate);
} catch (Exception e) {


}
}
return reDate;
}


/**
* 格式化时间 把相应字符串时间转化时间的相应格式
* @param date
* @param pattern
* @return Date
*/
public static Date stringToDate(String date, String pattern) {
Date reDate = new Date();
if (date != null && !date.equals("")) {
SimpleDateFormat bartDateFormat = new SimpleDateFormat(pattern);
try {
reDate = bartDateFormat.parse(date);
} catch (Exception e) {


}
}
return reDate;
}


/**
*  把相应时间转化为相应格式的字符串
* @param date
* @param pattern
* @return String
*/
public static String dateToString(Date date, String pattern) {
String reDate = "";
if (date != null) {
SimpleDateFormat bartDateFormat = new SimpleDateFormat(pattern);
try {
reDate = bartDateFormat.format(date);
} catch (Exception e) {


}
}
return reDate;
}


/**
* 取当前时间
* <p>
* 默认格式为:yyyy-MM-dd HH:mm:ss

* @return 字符串表示的当前时间
*/
public static String getDateTime() {
return getDateTime("yyyy-MM-dd HH:mm:ss");
}


/**
* 根据给定的格式取当前时间
* <p>
* 如果给定的格式为空,则使用默认格式:yyyy-MM-dd HH:mm:ss

* @param pattern
*            指定格式
* @return 字符串表示的当前时间
*/
public static String getDateTime(String pattern) {
if (null == pattern || "".equals(pattern)) {
pattern = "yyyy-MM-dd HH:mm:ss";
}//
SimpleDateFormat sdf = new SimpleDateFormat(pattern);
String dt = sdf.format(getDatabaseDateTime());
// String dt = sdf.format(new Date());
return dt;
}// end getDateTime()


/**
* 根据指定的格式格式化给定的日期
* <p>
* 如果给定的格式为空,则使用默认格式:yyyy-MM-dd HH:mm:ss

* @param toDate
*            Date 要格式化的日期
* @param pattern
*            String 指定的格式
* @return String 格式化后的日期
*/
public static String getDateTime(Date toDate, String pattern) {
if (null == pattern || "".equals(pattern)) {
pattern = "yyyy-MM-dd HH:mm:ss";
}
SimpleDateFormat sdf = new SimpleDateFormat(pattern);
return sdf.format(toDate);
}


/**
* 取格式为yyyymmddhhmm的时间
* <p>

* @return 字符串表示的当前时间
*/
public static String getSerialTime() {
try {
Calendar nowdate = Calendar.getInstance();
int year = nowdate.get(Calendar.YEAR);
String Current_Year = String.valueOf(year);
int month = nowdate.get(Calendar.MONTH) + 1;
int date = nowdate.get(Calendar.DATE);
String Current_Date = ((month < 10) ? "0" + String.valueOf(month)
: String.valueOf(month))
+ ((date < 10) ? "0" + String.valueOf(date) : String
.valueOf(date));


int hour = nowdate.get(Calendar.HOUR_OF_DAY);
int minute = nowdate.get(Calendar.MINUTE);
String Current_Time = ((hour < 10) ? "0" + String.valueOf(hour)
: String.valueOf(hour))
+ ((minute < 10) ? "0" + String.valueOf(minute) : String
.valueOf(minute));


String mydate = Current_Year + Current_Date + Current_Time;
return mydate;
} catch (Exception e) {
return "";
}
}


/**
* 取格式为yyyymmddhhmmss的时间
* <p>

* @return 字符串表示的当前时间
*/
public static String getSerialTime2() {
try {
Calendar nowdate = Calendar.getInstance();
int year = nowdate.get(Calendar.YEAR);
String Current_Year = String.valueOf(year);
int month = nowdate.get(Calendar.MONTH) + 1;
int date = nowdate.get(Calendar.DATE);
String Current_Date = ((month < 10) ? "0" + String.valueOf(month)
: String.valueOf(month))
+ ((date < 10) ? "0" + String.valueOf(date) : String
.valueOf(date));


int hour = nowdate.get(Calendar.HOUR_OF_DAY);
int minute = nowdate.get(Calendar.MINUTE);
int second = nowdate.get(Calendar.SECOND);
String Current_Time = ((hour < 10) ? "0" + String.valueOf(hour)
: String.valueOf(hour))
+ ((minute < 10) ? "0" + String.valueOf(minute) : String
.valueOf(minute))
+ ((second < 10) ? "0" + String.valueOf(second) : String
.valueOf(second));


String mydate = Current_Year + Current_Date + Current_Time;
return mydate;
} catch (Exception e) {
return "";
}
}


/**
* 将格式为yyyymmddhhmm的时间转化为中文字符串
* <p>

* @param serialTime
*            serialTime 时间字符串
* @return 中文时间字符串
*/
public static String getSerialString(String serialTime) {
try {
String rn = "";
rn += serialTime.substring(0, 4) + "年";
rn += serialTime.substring(4, 6) + "月";
rn += serialTime.substring(6, 8) + "日 ";
rn += serialTime.substring(8, 10) + ":";
rn += serialTime.substring(10, 12);
return rn;
} catch (Exception e) {
return "";
}
}// end getSerialString(String)


/**
* 取不带年份的时间。

* @param strTime
*            字符串格式的时间值
* @return 去除年份的时间
*/
public static String getTimeWithoutYear(final String strTime) {
if (StringUtil.isNullorBlank(strTime) || 5 >= strTime.length()) {
return strTime;
}
// todo:validat...
return strTime.substring(5);
}// end getTimeWithoutYear()


/**
* 将格式为yyyymmddhhmm的字符串类型转化为格式为yyyy-MM-dd HH:mm:ss的字符串
* <p>

* @param serialTime
*            serialTime 时间字符串
* @return 中文时间字符串
*/
public static String getSerialDate(String serialTime) {
try {
String rn = "";
rn += serialTime.substring(0, 4) + "-";
rn += serialTime.substring(4, 6) + "-";
rn += serialTime.substring(6, 8) + " ";
rn += serialTime.substring(8, 10) + ":";
rn += serialTime.substring(10, 12);
return rn;
} catch (Exception e) {
System.out.println("convertError:" + e.getMessage());
return "";
}
}// end getSerialDate(String)


/**
* 生成yyyy-MM格式日期

* @param year
*            String
* @param month
*            String
* @return String
*/
public static String getYearMonth(String year, String month) {
String strDate = year + "-";
if (month.length() == 1) {
strDate += "0" + month;
} else {
strDate += month;
}
return strDate;
}


/**
* 获取两日期相差月数,不足1个月的视为1个月

* @param dateStr1
*            String 大日期(格式:yyyy-MM-dd)
* @param dateStr2
*            String 小日期(格式:yyyy-MM-dd)
* @return int 相差月数
*/
public static int getDiscrepancyMonth(String dateStr1, String dateStr2) {
int discrepancyMonth = 0;
int intYear1 = Integer.parseInt(dateStr1.substring(0, dateStr1
.indexOf("-")));
int intMonth1 = Integer.parseInt(dateStr1.substring(dateStr1
.indexOf("-") + 1, dateStr1.lastIndexOf("-")));
int intDay1 = Integer.parseInt(dateStr1.substring(dateStr1
.lastIndexOf("-") + 1));
int intYear2 = Integer.parseInt(dateStr2.substring(0, dateStr2
.indexOf("-")));
int intMonth2 = Integer.parseInt(dateStr2.substring(dateStr2
.indexOf("-") + 1, dateStr2.lastIndexOf("-")));
int intDay2 = Integer.parseInt(dateStr2.substring(dateStr2
.lastIndexOf("-") + 1));
if ((intYear1 - intYear2) == 0) {
discrepancyMonth = intMonth1 - intMonth2;
} else {
discrepancyMonth = (intYear1 - intYear2 - 1) * 12
+ (12 - intMonth2) + intMonth1;
}
if (intDay1 > intDay2) {
discrepancyMonth += 1;
}
return discrepancyMonth;
}


public static boolean isLeapYear() {
Calendar cal = Calendar.getInstance();
int year = cal.get(Calendar.YEAR);
return isLeapYear(year);
}


public static boolean isLeapYear(int year) {
/**
* 详细设计: 1.被400整除是闰年,否则: 2.不能被4整除则不是闰年 3.能被4整除同时不能被100整除则是闰年
* 3.能被4整除同时能被100整除则不是闰年
*/
if ((year % 400) == 0)
return true;
else if ((year % 4) == 0) {
if ((year % 100) == 0)
return false;
else
return true;
} else
return false;
}


/**
* 判断指定日期的年份是否是闰年

* @param date
*            指定日期。
* @return 是否闰年
*/
public static boolean isLeapYear(java.util.Date date) {
/**
* 详细设计: 1.被400整除是闰年,否则: 2.不能被4整除则不是闰年 3.能被4整除同时不能被100整除则是闰年
* 3.能被4整除同时能被100整除则不是闰年
*/
// int year = date.getYear();
GregorianCalendar gc = (GregorianCalendar) Calendar.getInstance();
gc.setTime(date);
int year = gc.get(Calendar.YEAR);
return isLeapYear(year);
}


public static boolean isLeapYear(java.util.Calendar gc) {
/**
* 详细设计: 1.被400整除是闰年,否则: 2.不能被4整除则不是闰年 3.能被4整除同时不能被100整除则是闰年
* 3.能被4整除同时能被100整除则不是闰年
*/
int year = gc.get(Calendar.YEAR);
return isLeapYear(year);
}


public static String getFirstDayOfMonth(Date dDate) {
String strDate = getDateTime(dDate, "yyyy-MM-dd");
// int year =
// Integer.parseInt(strDate.substring(0,strDate.indexOf("-")));
// int month =
// Integer.parseInt(strDate.substring(strDate.indexOf("-")+1,strDate.lastIndexOf("-")));
String year = strDate.substring(0, strDate.indexOf("-"));
String month = strDate.substring(strDate.indexOf("-") + 1, strDate
.lastIndexOf("-"));
return (year + "-" + month + "-01");
}

/**
* 取得指定日期的所处月份的最后一天
* @param date 指定日期。
* @return String 指定日期的所处月份的最后一天
*/
public static String getLastDayOfMonthByString(
java.util.Date date ){
Date newDate = getLastDayOfMonth(date);
String strDate = getDateTime(newDate,"yyyy-MM-dd");
return strDate;
}


/**
* 取得指定日期的所处月份的最后一天

* @param date
*            指定日期。
* @return 指定日期的所处月份的最后一天
*/
public static java.util.Date getLastDayOfMonth(java.util.Date date) {
/**
* 详细设计: 1.如果date在1月,则为31日 2.如果date在2月,则为28日 3.如果date在3月,则为31日
* 4.如果date在4月,则为30日 5.如果date在5月,则为31日 6.如果date在6月,则为30日
* 7.如果date在7月,则为31日 8.如果date在8月,则为31日 9.如果date在9月,则为30日
* 10.如果date在10月,则为31日 11.如果date在11月,则为30日 12.如果date在12月,则为31日
* 1.如果date在闰年的2月,则为29日
*/
GregorianCalendar gc = (GregorianCalendar) Calendar.getInstance();
gc.setTime(date);
switch (gc.get(Calendar.MONTH)) {
case 0:
gc.set(Calendar.DAY_OF_MONTH, 31);
break;
case 1:
gc.set(Calendar.DAY_OF_MONTH, 28);
break;
case 2:
gc.set(Calendar.DAY_OF_MONTH, 31);
break;
case 3:
gc.set(Calendar.DAY_OF_MONTH, 30);
break;
case 4:
gc.set(Calendar.DAY_OF_MONTH, 31);
break;
case 5:
gc.set(Calendar.DAY_OF_MONTH, 30);
break;
case 6:
gc.set(Calendar.DAY_OF_MONTH, 31);
break;
case 7:
gc.set(Calendar.DAY_OF_MONTH, 31);
break;
case 8:
gc.set(Calendar.DAY_OF_MONTH, 30);
break;
case 9:
gc.set(Calendar.DAY_OF_MONTH, 31);
break;
case 10:
gc.set(Calendar.DAY_OF_MONTH, 30);
break;
case 11:
gc.set(Calendar.DAY_OF_MONTH, 31);
break;
}
// 检查闰年
if ((gc.get(Calendar.MONTH) == Calendar.FEBRUARY)
&& (isLeapYear(gc.get(Calendar.YEAR)))) {
gc.set(Calendar.DAY_OF_MONTH, 29);
}
return gc.getTime();
}


public static java.util.Calendar getLastDayOfMonth(java.util.Calendar gc) {
/**
* 详细设计: 1.如果date在1月,则为31日 2.如果date在2月,则为28日 3.如果date在3月,则为31日
* 4.如果date在4月,则为30日 5.如果date在5月,则为31日 6.如果date在6月,则为30日
* 7.如果date在7月,则为31日 8.如果date在8月,则为31日 9.如果date在9月,则为30日
* 10.如果date在10月,则为31日 11.如果date在11月,则为30日 12.如果date在12月,则为31日
* 1.如果date在闰年的2月,则为29日
*/
switch (gc.get(Calendar.MONTH)) {
case 0:
gc.set(Calendar.DAY_OF_MONTH, 31);
break;
case 1:
gc.set(Calendar.DAY_OF_MONTH, 28);
break;
case 2:
gc.set(Calendar.DAY_OF_MONTH, 31);
break;
case 3:
gc.set(Calendar.DAY_OF_MONTH, 30);
break;
case 4:
gc.set(Calendar.DAY_OF_MONTH, 31);
break;
case 5:
gc.set(Calendar.DAY_OF_MONTH, 30);
break;
case 6:
gc.set(Calendar.DAY_OF_MONTH, 31);
break;
case 7:
gc.set(Calendar.DAY_OF_MONTH, 31);
break;
case 8:
gc.set(Calendar.DAY_OF_MONTH, 30);
break;
case 9:
gc.set(Calendar.DAY_OF_MONTH, 31);
break;
case 10:
gc.set(Calendar.DAY_OF_MONTH, 30);
break;
case 11:
gc.set(Calendar.DAY_OF_MONTH, 31);
break;
}
// 检查闰年
if ((gc.get(Calendar.MONTH) == Calendar.FEBRUARY)
&& (isLeapYear(gc.get(Calendar.YEAR)))) {
gc.set(Calendar.DAY_OF_MONTH, 29);
}
return gc;
}


/**
* 获取上月
* @param p_str 年月表示,如:2009-01
* @return 如: input 2008-12 output 2008-11
*/
public static String getProMonth(String p_str) {
if (p_str == null)
{
return "0000-00";
}

if ((p_str.trim().length() < 5) && (p_str.trim().length() > 6))
{
return "0000-00";
}


String m_str = null;
p_str.substring(0,4);
int y = Integer.parseInt(p_str.substring(0, 4));
int m = Integer.parseInt(p_str.substring(5, p_str.length()));
if (m == 1) {
y--;
m = 12;
} else {
m--;
}


if (m < 10) {
m_str = String.valueOf(y) + "-0" + String.valueOf(m);
} else {
m_str = String.valueOf(y) + "-" + String.valueOf(m);
}


return m_str;
}

/**
* 获取上n个月
* @param p_str 年月表示,如:2009-01
* @param iNext 向上几个月份
* @return 如: input 2008-12 output 2008-11
*/
public static String getProMonth(String p_str, int iNext) {
if (p_str == null)
{
return "0000-00";
}
if ((p_str.trim().length() < 5) && (p_str.trim().length() > 6))
{
return "0000-00";
}
String m_str = p_str;
for (int i = 0; i < iNext;i++){
m_str = getProMonth(m_str);
}
return m_str;
}

public static String formatDateStr(String pattern, String dateStr) {
String tempStr = "";
SimpleDateFormat simpleDateFormat = new SimpleDateFormat(pattern);
Date date = new Date();
try { 
  date =   simpleDateFormat.parse(dateStr);  
   } catch (ParseException px) {
  return tempStr;
}
   tempStr = getDateTime(date,pattern);
   return tempStr;
}

/**
* 按倒序以给定的格式,得到从本月开始至以往n个月的列表
* @param pattern 年月格式,如:yyyy-MM 
* @param n  n个月
* @return 如:2009-07、2009-06、2009-05....  
*/
public static List<String> getProMonthsList(String pattern,int n) {
ArrayList<String> resultList = new ArrayList<String>();
if (null == pattern || "".equals(pattern)) {
pattern = "yyyy-MM";
}
String tempStr = getDateTime(pattern);
resultList.add(tempStr);//加入当月
for (int i = 1; i <= n; i++) {
tempStr = getProMonth(tempStr);
tempStr = formatDateStr(pattern, tempStr);
resultList.add(tempStr);
}
return resultList;
}


/**
* 获取下月
* @param p_str 年月表示,如:2009-01
* @return 如: input 2008-12 output 2008-11
*/
public static String getNextMonth(String p_str) {
if (p_str == null)
{
return "0000-00";
}

if ((p_str.trim().length() < 5) && (p_str.trim().length() > 6))
{
return "0000-00";
}


String m_str = null;
p_str.substring(0,4);
int y = Integer.parseInt(p_str.substring(0, 4));
int m = Integer.parseInt(p_str.substring(5, p_str.length()));
if (m == 13) {
y++;
m = 01;
} else {
m++;
}


if (m < 10) {
m_str = String.valueOf(y) + "-0" + String.valueOf(m);
} else {
m_str = String.valueOf(y) + "-" + String.valueOf(m);
}


return m_str;
}


/**
* 获取下n个月
* @param p_str 年月表示,如:2009-01
* @param iNext 向下几个月份
* @return 如: input 2008-12 output 2008-11
*/
public static String getNextMonth(String p_str, int iNext) {
if (p_str == null)
{
return "0000-00";
}
if ((p_str.trim().length() < 5) && (p_str.trim().length() > 6))
{
return "0000-00";
}
String m_str = p_str;
for (int i = 0; i < iNext;i++){
m_str = getNextMonth(m_str);
}
return m_str;
}
}
0 0
原创粉丝点击