Java日期操作(待补充)

/**
 * 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 {
		
	}
}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值