/**
* Java日期/时间处理类
* @author Sking
*/
package datetime;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;
public class DateUtil {
/*****-----------------Date操作------------------******/
/**
* (1)计算两个日期Date之间相隔的天数
* @param start 开始日期
* @param end 结束日期
* @return 两个日期之间相隔的天数
*/
public static int getIntervalDays(Date start,Date end){
if(start.after(end)){//交换,保持start时间在前
Date t=start;
start=end;
end=t;
}
long s=start.getTime();
long e=end.getTime();
return (int)((e-s)/(60*60*24*1000)+0.5);
}
/**
* (2)获取从指定日期Date开始指定天数后的日期
* @param date 指定开始日期
* @param n 指定天数
* @return 指定日期开始指定天数后的日期
*/
public static Date afterNDays(Date date,int n){
GregorianCalendar cal=new GregorianCalendar();
cal.setTime(date);
cal.add(Calendar.DATE, n);
return cal.getTime();
}
/**
* 获取当前日期所在月份的天数
* @param date 当前日期
* @return 当前日期所在月份的天数
*/
public static int DaysOfMonth(Date date){
GregorianCalendar cal=new GregorianCalendar();
cal.setTime(date);
return cal.getActualMaximum(Calendar.DAY_OF_MONTH);
}
/**
* 获取指定年的指定星期
* @param year 指定年
* @param week 一年中的第几个星期
* @return 指定年的指定星期的Calendar字符串数组
* (或者Date[])
*/
//public static Date[] getWeek(int year,int week)
public static String[] getWeek(int year,int week){
//Date[] result=new Date[7];
String[] result=new String[7];
GregorianCalendar cal=new GregorianCalendar();
cal.set(Calendar.YEAR, year);
cal.set(Calendar.WEEK_OF_YEAR,week);
cal.set(Calendar.DAY_OF_WEEK,cal.getFirstDayOfWeek());
//result[0]=cal.getTime();
result[0]=cal.getTime().toString();
for(int i=1;i<7;i++){
cal.add(Calendar.DAY_OF_WEEK, 1);
//result[i]=cal.getTime();
result[i]=cal.getTime().toString();
}
return result;
}
/**
* 获取指定年的第一个星期
* @param year 指定年
* @return 第一个星期的Calendar字符串数组
*/
public static String[] FirstWeek(int year){
return getWeek(year,1);
}
/**
* 获取指定年的最后一个星期
* @param year 指定年
* @return 最后一个星期的Calendar字符串数组
*/
public static String[] LastWeek(int year){
GregorianCalendar cal=new GregorianCalendar();
cal.set(Calendar.YEAR, year);
int last=cal.getActualMaximum(Calendar.WEEK_OF_YEAR);
return getWeek(year,last);
}
/**
* 计算某年某月包含的完整星期的个数,完整星期必须包含从
* getFirstDayOfWeek()到(getFirstDayOfWeek()+7)%7的全部日子
* @param year 指定年
* @param month 指定月
* @return 某年某月包含的完整星期的个数
* @throws Exception 月份没有在1-12之间
*/
public static int FullWeekOfMonth(int year,int month) throws Exception{
if(month<1||month>12)
throw new Exception("月份必须在1-12之间!");
GregorianCalendar cal=new GregorianCalendar();
int first=cal.getFirstDayOfWeek();
int weekCount=0;
cal.set(Calendar.YEAR, year);
cal.set(Calendar.MONTH, month-1);
cal.set(Calendar.DAY_OF_MONTH, 1);
int endDay=cal.getMaximum(Calendar.DAY_OF_MONTH);
//剔除最开始不完整的星期部分
while(cal.get(Calendar.DAY_OF_WEEK)!=first){
cal.add(Calendar.DAY_OF_MONTH, 1);
}
cal.add(Calendar.DAY_OF_MONTH, 7);
while(cal.get(Calendar.DAY_OF_MONTH)<=endDay
&&cal.get(Calendar.MONTH)==month-1){
weekCount++;
cal.add(Calendar.DAY_OF_MONTH, 7);
}
return weekCount;
}
/**
* 计算某年某月横跨的星期的个数,横跨的星期不要求完整
* @param year 指定年
* @param month 指定月
* @return 某年某月横跨的星期个数
* @throws Exception 月份没有在1-12之间
*/
public static int CrossWeekOfMonth(int year,int month) throws Exception{
if(month<1||month>12)
throw new Exception("月份必须在1-12之间!");
GregorianCalendar cal=new GregorianCalendar();
int first=cal.getFirstDayOfWeek();
int weekCount=0;
cal.set(Calendar.YEAR, year);
cal.set(Calendar.MONTH, month-1);
cal.set(Calendar.DAY_OF_MONTH, 1);
int endDay=cal.getMaximum(Calendar.DAY_OF_MONTH);
//剔除最开始不完整的星期部分
if(cal.get(Calendar.DAY_OF_WEEK)!=first){
weekCount++;
while(cal.get(Calendar.DAY_OF_WEEK)!=first){
cal.add(Calendar.DAY_OF_MONTH, 1);
}
}
cal.add(Calendar.DAY_OF_MONTH, 7);
while(cal.get(Calendar.DAY_OF_MONTH)<=endDay
&&cal.get(Calendar.MONTH)==month-1){
weekCount++;
cal.add(Calendar.DAY_OF_MONTH, 7);
}
if(cal.get(Calendar.MONTH)==month)
weekCount++;
return weekCount;
}
/*****-----------------格式化操作------------------******/
/*
* 常见的日期格式化字符串有:
* 1.yyyy-MM-dd hh:mm:ss
*/
/**
* (3)将指定日期转化为XXXX年XX月XX日XX时XX分XX秒
* @param date 指定日期
* @return XXXX年XX月XX日XX时XX分XX秒格式的时间字符串
*/
public static String ToChineseStyle(Date date){
GregorianCalendar cal=new GregorianCalendar();
cal.setTime(date);
int year=cal.get(Calendar.YEAR);
int month=cal.get(Calendar.MONTH)+1;
int day = cal.get(Calendar.DAY_OF_MONTH);
int hour = cal.get(Calendar.HOUR_OF_DAY);//24小时制
int minute = cal.get(Calendar.MINUTE);
int second = cal.get(Calendar.SECOND);
return year+"年"+month+"月"+day+"日"+hour+"时"+minute+"分"+second+"秒";
}
public static void main(String[] args) throws Exception {
}
}
Java日期操作(待补充)
最新推荐文章于 2022-11-18 13:59:24 发布