www.pudn.com > sendmail.rar > DateUtil.java
/**
*
*/
package com.sendmail;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;
import java.util.Locale;
import java.util.Vector;
public class DateUtil {
private static DateUtil ldu_=null;
public static DateUtil getInstance(){
if(ldu_==null){
ldu_=new DateUtil();
}
return ldu_;
}
/**
* 摘要: 获取今天的日期。
*
* 参数: theFormat设置日期输出格式,例如"yyyyMMddHHmmss"。
*
* 返回值: 指定格式的今天日期,返回值类型是String。
*/
public String getToday(String theFormat){
SimpleDateFormat formatter = new SimpleDateFormat(theFormat,Locale.CHINESE);
Date thedate=new Date();
return formatter.format(thedate);
}
/**
* 摘要: 获取昨天的日期。
*
* 参数: theFormat设置日期输出格式,例如"yyyyMMdd"。
*
* 返回值: 指定格式的昨天日期,返回值类型是String。
*/
public String getYesterday(String todaystr,String theFormat){
SimpleDateFormat formatter = new SimpleDateFormat(theFormat,Locale.CHINESE);
return convertDate(todaystr,theFormat,Calendar.DAY_OF_YEAR,-1);
}
/**
* 摘要: 计算相对于dateStr的日期,如果转换日期为上个月同期日期 dateStr,theFormat="yyyyMMdd",feildnum=Calendar.WEEK_OF_YEAR,thenum=-4。
*
* 参数: dateStr设置参照的日期,theFormat设置参照日期格式,feildnum处理方式,thenum计算值。
*
* 返回值: 指定格式的相对于dateStr的日期,返回值类型是String。
*/
public String convertDate(String dateStr,String theFormat,int feildnum,int thenum){
SimpleDateFormat formatter = null;
Calendar cldr = null;
Date date_pre = null;
Date date1 = null;
try{
formatter = new SimpleDateFormat(theFormat,Locale.CHINESE);
cldr = new GregorianCalendar();
date1 = formatter.parse(dateStr);
cldr.setTime(date1);
cldr.add(feildnum,thenum);
date_pre=cldr.getTime();
}catch(Exception e){
}
if(date_pre==null)
return formatter.format(date1);
else
return formatter.format(date_pre);
}
public int calDate(String dateStr1,String datestr2,String theFormat){
SimpleDateFormat formatter = null;
Calendar cldr = null;
Date date_pre = null;
Date date1 = null;
Date date2 = null;
int num=0;
try{
formatter = new SimpleDateFormat(theFormat,Locale.CHINESE);
cldr = new GregorianCalendar();
date1=formatter.parse(dateStr1);
date2=formatter.parse(datestr2);
num=Integer.parseInt(String.valueOf((date1.getTime()-date2.getTime())/1000/60/60/24));
}catch(Exception e){
}
return num;
}
//返回两个日期之间的日期(是指日)
public Vector betweenDates(String dateStr1,String datestr2,String theFormat){
Vector v1=new Vector();
int checknum=calDate(datestr2,dateStr1,theFormat);
if(checknum>0){
for(int i=0;i<=checknum;i++){
String datestr=convertDate(dateStr1,"yyyyMMdd",Calendar.DAY_OF_YEAR,i);
v1.add(datestr);
}
return v1;
}else if(checknum==0){
v1.add(dateStr1);
return v1;
}else{
return null;
}
}
//返回两个月份之间的月份
public Vector betweenMons(String fromDate,String toDate){
try{
if(Double.parseDouble(fromDate)>Double.parseDouble(toDate)){
return null;
}
Vector v1=new Vector();
String currMonth = fromDate;
v1.add(currMonth);
while(!currMonth.equals(toDate)){
currMonth=convertDate(currMonth,"yyyyMM",GregorianCalendar.MONTH,1);
v1.add(currMonth);
}
return v1;
}catch(Exception e){
System.out.println(e.toString());
return null;
}
}
/**
* 摘要: 转换str_d日期的格式。
*
* 参数: str_d需要转换格式的日期,Format_Old设置旧日期格式,Format_New设置新日期格式。
*
* 返回值: 指定格式的相对于str_d的日期,返回值类型是String。
*/
public String convertDay_Type(String str_d,String Format_Old,String Format_New){
SimpleDateFormat sdf=new SimpleDateFormat(Format_Old,Locale.CHINESE);
SimpleDateFormat sdf2=new SimpleDateFormat(Format_New,Locale.CHINESE);
String Str_date="";
try{
Date d1=sdf.parse(str_d);
Str_date= sdf2.format(d1);
}catch(Exception e){
}
return Str_date;
}
/*
* 返回指定日期的所在周的周几日期;(周日是一周的结束);thenum取1~7;7表示星期日
*/
public String convertDay_Week(String dateStr,int thenum){
SimpleDateFormat formatter = null;
Calendar cldr = null;
Date date_pre = null;
Date date1 = null;
try{
formatter = new SimpleDateFormat("yyyyMMdd",Locale.CHINESE);
cldr = new GregorianCalendar();
date1 = formatter.parse(dateStr);
cldr.setTime(date1);
int iWeek = cldr.get(Calendar.DAY_OF_WEEK);
int i = 0;
if(iWeek==1){ //指定日期是星期日
i = thenum - iWeek - 6;
}else{
i = thenum - iWeek + 1;
}
cldr.add(Calendar.DAY_OF_YEAR,i);
date_pre=cldr.getTime();
}catch(Exception e){
}
if(date_pre==null)
return formatter.format(date1);
else
return formatter.format(date_pre);
}
//根据传入的日期返回所属的季度,如"200501",返回"2005年第一季度"
public String getQuarterName(String sDate){
String sQuarter = "";
if(sDate.length()<6) return "当前日期有误:" + sDate;
String sYear = sDate.substring(0, 4) + "年";
int iMM = Integer.parseInt(sDate.substring(4, 6));
switch(iMM){
case 1 :
sQuarter = sYear + "第一季度";
break;
case 2 :
sQuarter = sYear + "第一季度";
break;
case 3 :
sQuarter = sYear + "第一季度";
break;
case 4 :
sQuarter = sYear + "第二季度";
break;
case 5 :
sQuarter = sYear + "第二季度";
break;
case 6 :
sQuarter = sYear + "第二季度";
break;
case 7 :
sQuarter = sYear + "第三季度";
break;
case 8 :
sQuarter = sYear + "第三季度";
break;
case 9 :
sQuarter = sYear + "第三季度";
break;
case 10 :
sQuarter = sYear + "第四季度";
break;
case 11 :
sQuarter = sYear + "第四季度";
break;
case 12 :
sQuarter = sYear + "第四季度";
break;
}
return sQuarter;
}
//根据传入的日期返回所属的季度,如"200501",返回"20051"
public String getQuarterCode(String sDate){
String sQuarter = "";
if(sDate.length()<6) return "当前日期有误:" + sDate;
String sYear = sDate.substring(0, 4);
int iMM = Integer.parseInt(sDate.substring(4, 6));
switch(iMM){
case 1 :
sQuarter = sYear + "1";
break;
case 2 :
sQuarter = sYear + "1";
break;
case 3 :
sQuarter = sYear + "1";
break;
case 4 :
sQuarter = sYear + "2";
break;
case 5 :
sQuarter = sYear + "2";
break;
case 6 :
sQuarter = sYear + "2";
break;
case 7 :
sQuarter = sYear + "3";
break;
case 8 :
sQuarter = sYear + "3";
break;
case 9 :
sQuarter = sYear + "3";
break;
case 10 :
sQuarter = sYear + "4";
break;
case 11 :
sQuarter = sYear + "4";
break;
case 12 :
sQuarter = sYear + "4";
break;
}
return sQuarter;
}
//根据传入的日期返回上一季度的最后月份值
public String getLastQuaMonth(String sDate){
String sQuarter = "";
if(sDate.length()<6) return "当前日期有误:" + sDate;
if(sDate.length()>6) sDate = sDate.substring(0, 6); //截取年月
String sYear = sDate.substring(0, 4);
int iMM = Integer.parseInt(sDate.substring(4, 6));
switch(iMM){
case 1 :
sQuarter = convertDate(sDate, "yyyyMM", GregorianCalendar.MONTH, -1);
break;
case 2 :
sQuarter = convertDate(sDate, "yyyyMM", GregorianCalendar.MONTH, -2);
break;
case 3 :
sQuarter = sDate;
break;
case 4 :
sQuarter = convertDate(sDate, "yyyyMM", GregorianCalendar.MONTH, -1);
break;
case 5 :
sQuarter = convertDate(sDate, "yyyyMM", GregorianCalendar.MONTH, -2);
break;
case 6 :
sQuarter = convertDate(sDate, "yyyyMM", GregorianCalendar.MONTH, -3);
break;
case 7 :
sQuarter = convertDate(sDate, "yyyyMM", GregorianCalendar.MONTH, -1);
break;
case 8 :
sQuarter = convertDate(sDate, "yyyyMM", GregorianCalendar.MONTH, -2);
break;
case 9 :
sQuarter = sDate;
break;
case 10 :
sQuarter = convertDate(sDate, "yyyyMM", GregorianCalendar.MONTH, -1);
break;
case 11 :
sQuarter = convertDate(sDate, "yyyyMM", GregorianCalendar.MONTH, -2);
break;
case 12 :
sQuarter = sDate;
break;
}
return sQuarter;
}
//根据传入的季度返回该季度的开始或最后一个月份值,sFlag="begin":开始月份值;sFlag="end":最后月份值
public String getQuarMonth(String sQuarter, String sFlag){
String sDate = "-1";
if(sQuarter.length()!=5) {
System.out.println("传入的季度值有误:"+sQuarter);
return "-1";
}
String sYear = sQuarter.substring(0, 4);
int iNum = Integer.parseInt(sQuarter.substring(4, 5));
switch(iNum){
case 1 :
if("begin".equals(sFlag)){
sDate = sYear + "01";
}else if("end".equals(sFlag)){
sDate = sYear + "03";
}
break;
case 2 :
if("begin".equals(sFlag)){
sDate = sYear + "04";
}else if("end".equals(sFlag)){
sDate = sYear + "06";
}
break;
case 3 :
if("begin".equals(sFlag)){
sDate = sYear + "07";
}else if("end".equals(sFlag)){
sDate = sYear + "09";
}
break;
case 4 :
if("begin".equals(sFlag)){
sDate = sYear + "10";
}else if("end".equals(sFlag)){
sDate = sYear + "12";
}
break;
}
return sDate;
}
//返回报表展示数据默认日期
public String getDefaultDate(String sTime, String dateType){
String tmpDate = "";
try{
//获取正常的默认日期
if("month".equals(dateType)){ //月份
if(Integer.parseInt(getToday("ddHHmm")) >= Integer.parseInt(sTime)){
tmpDate = convertDate(getToday("yyyyMM"),"yyyyMM",java.util.Calendar.MONTH, -1);
}else{
tmpDate = convertDate(getToday("yyyyMM"),"yyyyMM",java.util.Calendar.MONTH, -2);
}
}else{ //日
//9点前不显示昨天数据,显示前天的
if (Integer.parseInt(getToday("HHmm")) >= Integer.parseInt(sTime)) {
tmpDate = getYesterday(getToday("yyyyMMdd"), "yyyyMMdd");
} else {
tmpDate = convertDate(getToday("yyyyMMdd"), "yyyyMMdd", java.util.Calendar.DAY_OF_YEAR, -2);
}
}
}catch(Exception ex){
System.out.println(ex.toString());
if("month".equals(dateType)){ //月份
if(Integer.parseInt(getToday("ddHHmm")) >= 50900){
tmpDate = convertDate(getToday("yyyyMM"),"yyyyMM",java.util.Calendar.MONTH, -1);
}else{
tmpDate = convertDate(getToday("yyyyMM"),"yyyyMM",java.util.Calendar.MONTH, -2);
}
}else{ //日
//9点前不显示昨天数据,显示前天的
if (Integer.parseInt(getToday("HHmm")) >= 900) {
tmpDate = getYesterday(getToday("yyyyMMdd"), "yyyyMMdd");
} else {
tmpDate = convertDate(getToday("yyyyMMdd"), "yyyyMMdd", java.util.Calendar.DAY_OF_YEAR, -2);
}
}
}finally{
}
return tmpDate;
}
/**
* 摘要: 获取N天前的日期。
*
* 参数: theFormat设置日期输出格式,例如"yyyyMMdd"。
*
* 返回值: 指定格式的昨天日期,返回值类型是String。
*/
public String getXDayBeforeToday(String todaystr,String theFormat,int num){
SimpleDateFormat formatter = new SimpleDateFormat(theFormat,Locale.CHINESE);
return convertDate(todaystr,theFormat,Calendar.DAY_OF_YEAR,num);
}
}