常用代码:java日期处理

个人整理的关于java中日期处理会应用到的程序。

 

/**
 *  Copyright ? 2010 mywhile Co.Ltd.
 *  All right reserved.
 *
 *  作者:yshlin
 *  @author yshlin
 *  E-mail:yshlin1106@126.com
 */
package com.mywhile.global.tools;

import java.text.ParsePosition;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;

public class GlobalDateMethod {
	/*********************************bean***************************************/
	private String temp;
	private String info;
	private ArrayList<String> week;
	private static long DAY = 24L * 60L * 60L * 1000L;
	/*********************************set/get***************************************/
	public String getTemp() {
		return temp;
	}
	public void setTemp(String temp) {
		this.temp = temp;
	}
	public String getInfo() {
		return info;
	}
	public void setInfo(String info) {
		this.info = info;
	}
	public ArrayList<String> getWeek() {
		return week;
	}
	public void setWeek(ArrayList<String> week) {
		this.week = week;
	}
	/**********************************static method****************************************/
	/**
	 * 将日期转换成Date格式    
	 * @param strDate   
	 * @return
	 * 	例:输入:2010-12-17
	 * 	返回:Fri Dec 17 00:00:00 CST 2010
	 */
	public static Date strToDate(String strDate) {
		SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
		ParsePosition pos = new ParsePosition(0);
		Date strtodate = formatter.parse(strDate, pos);
		return strtodate;
	}
	/**
	 * 取得这个日期是周几
	 * @param strdate
	 * @return
	 * 	例:输入:2010-12-17
	 * 	返回:5
	 * 	2010年12月17日是周五
	 */
	public static String getWeekDayIntNumberForStrDate(String strdate) {
		Date date = strToDate(strdate);
		Calendar c = Calendar.getInstance();
		c.setTime(date);
		//hour中存的就是星期几了,其范围 1~7
		//Calendar.DAY_OF_WEEK 的取值:1=星期日 7=星期六,其他类推
		int week=c.get(Calendar.DAY_OF_WEEK)-1;
		return week+"";
	}
	/**
	 * 检查时间大小 start > end
	 * @param start
	 * @param end
	 * @return
	 * 	例:
	 * 		"2010-12-01" before "2010-11-1" = false;
	 *		"2010-12-01" before "2010-12-01" = false;
	 *		"2010-11-01" before "2010-12-1" = true;
	 */
	public static boolean checkStartDateBeforeEndDate(String start, String end) {
		return strToDate(start).before(strToDate(end));
	}
	/**
	 * 检查时间大小 start < end
	 * @param start
	 * @param end
	 * @return
	 * 	例:
	 * 		"2010-12-01" after "2010-11-1" = true;
	 *		"2010-12-01" after "2010-12-01" = false;
	 *		"2010-11-01" after "2010-12-1" = false;
	 */
	public static boolean checkStartDateAfterEndDate(String start, String end) {
		return strToDate(start).after(strToDate(end));
	}
	/**
	 * 得到一个时间延后或前移几天的时间,sdate为时间,delay为前移或后延的天数
	 * @param nowdate	YYYY-MM-DD
	 * @param delay
	 * @return
	 */
	public static String getNextDay(String sdate, int delay) {
		try {
			SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
			String mdate = "";
			Date d = strToDate(sdate);
			long myTime = (d.getTime() / 1000) + delay * 24 * 60 * 60;
			d.setTime(myTime * 1000);
			mdate = format.format(d);
			return mdate;
		} catch (Exception e) {
			return "";
		}
	}
	/**
	 * 获取现在时间
	 * @return 返回短时间字符串格式yyyy-MM-dd
	 */
	public static String getStringDateShort() {
		Date currentTime = new Date();
		SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
		String dateString = formatter.format(currentTime);
		return dateString;
	}
	/**
	 * 将短时间格式时间转换为字符串 yyyy-MM-dd
	 * @param date	YYYY-MM-DD
	 * @return
	 */
	public static String dateToStr(Date date) {
		SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
		String dateString = formatter.format(date);
		return dateString;
	}
	/**
	 * 得到二个日期间的间隔天数
	 * @param sdate1	YYYY-MM-DD
	 * @param sdate2	YYYY-MM-DD
	 * @return
	 * 	若前一日期比后一日期早则返回负数,若前一日期比后一日期晚则反回正数
	 */
	public static String getTwoDay(String sdate1, String sdate2) {
		SimpleDateFormat myFormatter = new SimpleDateFormat("yyyy-MM-dd");
		long day = 0;
		try {
			Date date = myFormatter.parse(sdate1);
			Date mydate = myFormatter.parse(sdate2);
			day = (date.getTime() - mydate.getTime()) / (24 * 60 * 60 * 1000);
		} catch (Exception e) {
			return "";
		}
		return day + "";
	}
	/**
	 * 取得当前周的每一天
	 * @return
	 */
	public static String[] getNowDayForWeek(){
		String now = getStringDateShort();
		String num = getWeekDayIntNumberForStrDate(now);
		String temp[] = new String[7];
		if(num.equals("5")){
			temp[0] = GlobalDateMethod.getNextDay(now, -4);
			temp[1] = GlobalDateMethod.getNextDay(now, -3);
			temp[2] = GlobalDateMethod.getNextDay(now, -2);
			temp[3] = GlobalDateMethod.getNextDay(now, -1);
			temp[4] = now;
			temp[5] = GlobalDateMethod.getNextDay(now, 1);
			temp[6] = GlobalDateMethod.getNextDay(now, 2);
		}else if(num.equals("4")){
			temp[0] = GlobalDateMethod.getNextDay(now, -3);
			temp[1] = GlobalDateMethod.getNextDay(now, -2);
			temp[2] = GlobalDateMethod.getNextDay(now, -1);
			temp[3] = now;
			temp[4] = GlobalDateMethod.getNextDay(now, 1);
			temp[5] = GlobalDateMethod.getNextDay(now, 2);
			temp[6] = GlobalDateMethod.getNextDay(now, 3);
		}else if(num.equals("3")){
			temp[0] = GlobalDateMethod.getNextDay(now, -2);
			temp[1] = GlobalDateMethod.getNextDay(now, -1);
			temp[2] = now;
			temp[3] = GlobalDateMethod.getNextDay(now, 1);
			temp[4] = GlobalDateMethod.getNextDay(now, 2);
			temp[5] = GlobalDateMethod.getNextDay(now, 3);
			temp[6] = GlobalDateMethod.getNextDay(now, 4);
		}else if(num.equals("2")){
			temp[0] = GlobalDateMethod.getNextDay(now, -1);
			temp[1] = now;
			temp[2] = GlobalDateMethod.getNextDay(now, 1);
			temp[3] = GlobalDateMethod.getNextDay(now, 2);
			temp[4] = GlobalDateMethod.getNextDay(now, 3);
			temp[5] = GlobalDateMethod.getNextDay(now, 4);
			temp[6] = GlobalDateMethod.getNextDay(now, 5);
		}else if(num.equals("1")){
			temp[0] = now;
			temp[1] = GlobalDateMethod.getNextDay(now, 1);
			temp[2] = GlobalDateMethod.getNextDay(now, 2);
			temp[3] = GlobalDateMethod.getNextDay(now, 3);
			temp[4] = GlobalDateMethod.getNextDay(now, 4);
			temp[5] = GlobalDateMethod.getNextDay(now, 5);
			temp[6] = GlobalDateMethod.getNextDay(now, 6);
		}else if(num.equals("0")){
			temp[0] = GlobalDateMethod.getNextDay(now, -6);
			temp[1] = GlobalDateMethod.getNextDay(now, -5);
			temp[2] = GlobalDateMethod.getNextDay(now, -4);
			temp[3] = GlobalDateMethod.getNextDay(now, -3);
			temp[4] = GlobalDateMethod.getNextDay(now, -2);
			temp[5] = GlobalDateMethod.getNextDay(now, -1);
			temp[6] = now;
		}else{
			temp[0] = GlobalDateMethod.getNextDay(now, -5);
			temp[1] = GlobalDateMethod.getNextDay(now, -4);
			temp[2] = GlobalDateMethod.getNextDay(now, -3);
			temp[3] = GlobalDateMethod.getNextDay(now, -2);
			temp[4] = GlobalDateMethod.getNextDay(now, -1);
			temp[5] = now;
			temp[6] = GlobalDateMethod.getNextDay(now, 1);
		}
		return temp;
	}
	/**
	 * 根据输入的日期取出这一周的开始结尾
	 * @param date	YYYY-MM-DD
	 * @return
	 * 	例:输入:2010-01-15 返回:2010-01-11,2010-01-17
	 */
	public static String dayOfWeekStartEnd(String date) {
		String reD = "";
		Date today = GlobalDateMethod.strToDate(date);;
		Calendar cal = Calendar.getInstance();
		cal.setTime(today);
		int between = cal.get(Calendar.DAY_OF_WEEK) - 1;
		int subMonday = 0;
		if (between >= 1 && between <= 6) {
			subMonday = 1 - between;
		} else if (between == 0) {
			subMonday = -6;
		}
		cal.add(Calendar.DAY_OF_MONTH, subMonday);
		reD += new SimpleDateFormat("yyyy-MM-dd").format(cal.getTime());
		cal.add(Calendar.DAY_OF_MONTH, 6);
		reD += ("," + new SimpleDateFormat("yyyy-MM-dd").format(cal.getTime()));
		return reD;
	}
	/**
	 * 输入一个日期取这一周的第一天,即周一
	 * @param date	YYYY-MM-DD
	 * @return
	 */
	public static String dayOfWeekStart(String date) {
		String reD = "";
		Date today = GlobalDateMethod.strToDate(date);;
		Calendar cal = Calendar.getInstance();
		cal.setTime(today);
		int between = cal.get(Calendar.DAY_OF_WEEK) - 1;
		int subMonday = 0;
		if (between >= 1 && between <= 6) {
			subMonday = 1 - between;
		} else if (between == 0) {
			subMonday = -6;
		}
		cal.add(Calendar.DAY_OF_MONTH, subMonday);
		reD = new SimpleDateFormat("yyyy-MM-dd").format(cal.getTime());
		cal.add(Calendar.DAY_OF_MONTH, 6);
		//reD += ("," + new SimpleDateFormat("yyyy-MM-dd").format(cal.getTime()));
		return reD;
	}
	/**
	 * 输入一个日期,取这一日期所在周的最后一天,即周日
	 * @param date	YYYY-MM-DD
	 * @return
	 */
	public static String dayOfWeekEnd(String date) {
		String reD = "";
		Date today = GlobalDateMethod.strToDate(date);;
		Calendar cal = Calendar.getInstance();
		cal.setTime(today);
		int between = cal.get(Calendar.DAY_OF_WEEK) - 1;
		int subMonday = 0;
		if (between >= 1 && between <= 6) {
			subMonday = 1 - between;
		} else if (between == 0) {
			subMonday = -6;
		}
		cal.add(Calendar.DAY_OF_MONTH, subMonday);
		reD = new SimpleDateFormat("yyyy-MM-dd").format(cal.getTime());
		cal.add(Calendar.DAY_OF_MONTH, 6);
		reD = new SimpleDateFormat("yyyy-MM-dd").format(cal.getTime());
		return reD;
	}
	/**
	 * 取两个日期之间相隔多少天
	 * @param date1	YYYY-MM-DD
	 * @param date2	YYYY-MM-DD
	 * @return
	 */
	public static long getDaysLong(String date1, String date2) {
		if (date1 == null || date1.equals(""))
			return 0;
		if (date2 == null || date2.equals(""))
			return 0;
		// 转换为标准时间
		SimpleDateFormat myFormatter = new SimpleDateFormat("yyyy-MM-dd");
		Date date = null;
		Date mydate = null;
		try {
			date = myFormatter.parse(date1);
			mydate = myFormatter.parse(date2);
		} catch (Exception e) {
		}
		long day = (date.getTime() - mydate.getTime()) / (24 * 60 * 60 * 1000);
		return day;
	}
	/**
	 * 取两个日期之间相隔多少天;日期相隔较短
	 * @param date1	YYYY-MM-DD
	 * @param date2	YYYY-MM-DD
	 * @return
	 */
	public static int getDaysInt(String date1, String date2) {
		if (date1 == null || date1.equals(""))
			return 0;
		if (date2 == null || date2.equals(""))
			return 0;
		// 转换为标准时间
		SimpleDateFormat myFormatter = new SimpleDateFormat("yyyy-MM-dd");
		Date date = null;
		Date mydate = null;
		try {
			date = myFormatter.parse(date1);
			mydate = myFormatter.parse(date2);
		} catch (Exception e) {
		}
		int day = (int)((date.getTime() - mydate.getTime()) / (24 * 60 * 60 * 1000));
		return day;
	}
	/**
	 * 两个日期之间的所有周,返回一个字符串数组,每个字符串内容包括每周的开始时间,结束时间
	 * @param start	YYYY-MM-DD
	 * @param end	YYYY-MM-DD
	 * @return
	 */
	public static String[] getWeekOfStartEndDate(String start, String end){
		String sdate = dayOfWeekStart(start);
		String edate = dayOfWeekEnd(end);
		int days = getDaysInt(edate, sdate);
		days = days / 7 + ((days % 7) > 0 ? 1 : 0);
		String reS[] = new String[days];
		for(int i=0;i<days;i++){
			String d = dayOfWeekStartEnd(sdate);
			int ts = getDaysInt(edate, sdate);
			if(ts < 0){
				return reS;
			}else{
				reS[i] = d;
			}
			sdate = getNextDay(sdate, 7);
		}
		return reS;
	}
}

  

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值