📄 dateop.java
字号:
package com.cmmi2pms.common;
import java.util.Date;
import java.util.Calendar;
public class DateOp
{
public DateOp(){ }
public static String parseYear(String ymd)
{
return ymd.substring(0,4);
}
public static String parseMonth(String ymd)
{
String s=ymd.substring(5,7);
if (s.substring(0,1).equals("0"))
{
return s.substring(1,2);
}
else
{
return s;
}
}
public static String parseDate(String ymd)
{
String s=ymd.substring(8,10);
if (s.substring(0,1).equals("0"))
{
return s.substring(1,2);
}
else
{
return s;
}
}
public static int getNumOfMonth(int m,int year)
{
if (m==1||m==3||m==5||m==7||m==8||m==10||m==12)
{
return 31;
}
else if (m==4||m==6||m==9||m==11)
{
return 30;
}
else if (m==2)
{
if (year % 400==0 || year %4 ==0 && year % 100 !=0)
{
return 29;
}
else
{
return 28;
}
}
return 0;
}
public static int getTotal(String ymd1,String ymd2)
{
int total;
if ( getDay(ymd1)!=1 )
{
if (getDay(ymd1)==0)
{
total=(subDayNum(ymd1,ymd2)-1)%7;
if (total==0)
{
total=(subDayNum(ymd1,ymd2)-1)/7;
if (total==0)
{
total++;
}
}
else
{
total=(subDayNum(ymd1,ymd2)-1)/7+1;
}
}
else
{
total=(subDayNum(ymd1,ymd2)-7+getDay(ymd1))%7;
if (total==0)
{
total=(subDayNum(ymd1,ymd2)-7+getDay(ymd1))/7;
if (total==0)
{
return total++;
}
}
else
{
total=(subDayNum(ymd1,ymd2)-7+getDay(ymd1))/7+1;
}
}
}
else
{
total=(subDayNum(ymd1,ymd2)-1)/7;
}
return total;
}
//string类型(如2004-04-12)转换成datetime类型
public static Date getDate(String ymd)
{
int year=Integer.parseInt( parseYear(ymd) )-1900;
int month=Integer.parseInt( parseMonth(ymd) )-1;
int date=Integer.parseInt( parseDate(ymd) );
return new Date(year,month,date);
}
//datetime类型转换成String
public static String getDate(Date d)
{
String s;
s=Integer.toString(d.getYear()+1900);
s=s.concat("-");
if ((d.getMonth()+1)<10)
{
s=s.concat("0");
}
s=s.concat(Integer.toString(d.getMonth()+1));
s=s.concat("-");
if (d.getDate()<10)
{
s=s.concat("0");
}
s=s.concat(Integer.toString(d.getDate()));
return s;
}
//判断某天是当月的第几周
public static int getWeek(String ymd)
{
Date d=getDate(ymd);
int i;
if (d.getDate() % 7 == 0)
{
i=d.getDate()/7;
}
else
{
i=d.getDate()/7 + 1;
}
return i;
}
//判断某天是当月的星期几
public static int getDay(String ymd)
{
Date d=getDate(ymd);
return d.getDay();
}
//日期的加(如某天加若干天是哪天)
public static Date dateAdd(String ymd,int num)
{
Date d=getDate(ymd);
int total,mon,year;
mon=d.getMonth()+1;
year=d.getYear()+1900;
total=num-(getNumOfMonth(mon,d.getYear()+1900)-d.getDate());
if (mon==12)
{
year++;
mon=1;
}
else
{
mon++;
}
while(total>0 && total<getNumOfMonth(mon,year))
{
total-=getNumOfMonth(mon,year);
if (mon==12)
{
year++;
mon=1;
}
else
{
mon++;
}
}
return new Date(year-1900,mon-1,total);
}
public static Date dateAdd(Date d,int num)
{
return dateAdd(getDate(d),num);
}
//日期的减(如某天减若干天是哪天)
public static Date dateDel(String ymd,int num)
{
Date d=getDate(ymd);
int total,mon,year;
mon=d.getMonth()+1;
year=d.getYear()+1900;
total=num-d.getDate();
if (mon==1)
{
year--;
mon=12;
}
else
{
mon--;
}
while(total>0 && total<getNumOfMonth(mon,year))
{
total-=getNumOfMonth(mon,year);
if (mon==1)
{
year--;
mon=12;
}
else
{
mon--;
}
}
return new Date(year-1900,mon-1,getNumOfMonth(mon,year)-total);
}
//计算两个时间区间有多少天(如2004-01-21到2004-05-12)
public static int subDayNum(String ymd1,String ymd2)
{
Date d1=getDate(ymd1);
Date d2=getDate(ymd2);
int total=0,year1,year2,mon1,mon2,day1,day2;
int temp1,temp2,temp3,temp4;
year1=d1.getYear()+1900;
year2=d2.getYear()+1900;
mon1=d1.getMonth()+1;
mon2=d2.getMonth()+1;
day1=d1.getDate();
day2=d2.getDate();
temp1=mon1;
temp2=mon2;
temp3=year1;
temp4=year2;
if (year1<year2)
{
total=getNumOfMonth(temp1,year1)-day1;
}
else if (year1>year2)
{
total=getNumOfMonth(temp2,year2)-day2;
}
while (temp3!=temp4)
{
if (temp3<temp4)
{
//total+=getNumOfMonth(temp1,year1)-day1;
temp1++;
while(temp1<13)
{
total+=getNumOfMonth(temp1,temp3);
temp1++;
}
temp3++;
}
else
{
//total=getNumOfMonth(temp2,year2)-day2;
temp2++;
while(temp2<13)
{
total+=getNumOfMonth(temp2,temp4);
temp2++;
}
temp4++;
}
}
if (year1<year2)
{
total+=day2;
mon2--;
while (mon2>0)
{
total+=getNumOfMonth(mon2,year2);
mon2--;
}
}
else if (year1>year2)
{
total+=day1;
mon1--;
while (mon1>0)
{
total+=getNumOfMonth(mon1,year1);
mon1--;
}
}
else if (year1==year2)
{
if (mon1<mon2)
{
total+=getNumOfMonth(mon1,year1)-day1;
mon1++;
while (mon1!=mon2)
{
total+=getNumOfMonth(mon1,year1);
mon1++;
}
total+=day2;
}
else if (mon1>mon2)
{
total+=getNumOfMonth(mon2,year1)-day2;
mon2++;
while(mon1!=mon2)
{
total+=getNumOfMonth(mon2,year1);
mon2++;
}
total+=day1;
}
else
{
total+=day2-day1;
}
}
return total;
}
//计算两个时间区间有多少周(如2004-01-21到2004-05-12)
public static int subWeekNum(String ymd1,String ymd2)
{
Date d1=getDate(ymd1);
Date d2=getDate(ymd2);
int year1,year2,mon1,mon2,day1,day2;
int total=0;
year1=d1.getYear();
year2=d2.getYear();
mon1=d1.getMonth();
mon2=d2.getMonth();
day1=d1.getDate();
day2=d2.getDate();
if (year1<year2)
{
total=getTotal(ymd1,ymd2);
}
else if (year1>year2)
{
total=getTotal(ymd2,ymd1);
}
else
{
if (mon1<mon2)
{
total=getTotal(ymd1,ymd2);
}
else if (mon1>mon2)
{
total=getTotal(ymd2,ymd1);
}
else if (mon1==mon2)
{
if (day1<day2)
{
total=getTotal(ymd1,ymd2);
}
else if (day1>day2)
{
total=getTotal(ymd2,ymd1);
}
else
{
total=0;
}
}
}
return total;
}
public static void main(String args[])
{
DateOp ds=new DateOp();
//string类型(如2004-04-12)转换成datetime类型:public Date getDate(String ymd)
System.out.println("string类型(如2004-04-12)转换成datetime类型:");
System.out.println(ds.getDate("2004-04-12").toString());
System.out.println();
//datetime类型转换成String:public String getDate(Date d)
System.out.println("datetime类型转换成String:");
System.out.println(ds.getDate(ds.getDate("2004-04-12")));
System.out.println();
//判断某天是当月的第几周:public int getWeek(String ymd)
System.out.println("判断某天是当月的第几周:");
System.out.println("2004-04-12 是第"+ds.getWeek("2004-04-12")+"周");
System.out.println();
//判断某天是当月的星期几:public int getDay(String ymd)
System.out.println("判断某天是当月的星期几(星期日用0表示):");
System.out.println("2004-04-12 是星期"+ds.getDay("2004-04-12"));
System.out.println();
//日期的加(如某天加若干天是哪天):public Date dateAdd(String ymd,int num)
System.out.println("日期的加(如某天加若干天是哪天):");
System.out.println("2004-04-12 加30天是"+ds.dateAdd("2004-04-12",30).toString());
System.out.println();
//日期的加(如某天加若干天是哪天):public Date dateAdd(Date d,int num)
System.out.println("日期的加(如某天加若干天是哪天):");
System.out.println("2004-04-12 加30天是"+ds.dateAdd(ds.getDate("2004-04-12"),30).toString());
System.out.println();
//日期的减(如某天减若干天是哪天):public Date dateDel(String ymd,int num)
System.out.println("日期的减(如某天减若干天是哪天):");
System.out.println("2004-04-12 减30天是"+ds.dateDel("2004-04-12",30).toString());
System.out.println();
//计算两个时间区间有多少天(如2004-01-21到2004-05-12):public int subDayNum(String ymd1,String ymd2)
System.out.println("计算两个时间区间有多少天(如2004-01-21到2004-05-12):");
System.out.println("2004-01-21到2004-05-12有"+ds.subDayNum("2004-01-21","2004-05-12")+"天");
System.out.println();
//计算两个时间区间有多少周(如2004-01-21到2004-05-12):public int subWeekNum(String ymd1,String ymd2)
System.out.println("计算两个时间区间有多少周(如2004-01-21到2004-05-12):");
System.out.println("2004-01-21到2004-05-12有"+ds.subWeekNum("2004-01-21","2004-05-12")+"周");
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -