`
yshlin
  • 浏览: 61503 次
  • 性别: Icon_minigender_1
  • 来自: 济南
社区版块
存档分类
最新评论

常用代码:java日期处理

    博客分类:
  • 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;
	}
}

  

分享到:
评论

相关推荐

    Java常用代码

    各种Java功能代码,Java访问XML文件,Java数据库访问技术,Java对工作方式日期的处理

    Java常用代码方法汇总

    java常用代码方法很适合初学者和刚刚参加工作的程序员,里面包含了常用正则表达式、公共日期类、串口驱动、各种数据库连接、公交换乘算法、 列出某文件夹及其子文件夹下面的文件,并可根据扩展名过滤等等很多有用的...

    Java的日期时间处理类讲解代码( Date 、Calendar、SimpleDateFormat、LocalDateTime)

    2、时区处理:了解如何使用Java日期时间类处理多时区的情况,包括转换、调整时差、比较等操作。 3、计划任务与调度:学习如何使用日期时间类来实现计划任务和调度功能,例如定时执行任务、定期触发事件等。 4、日历...

    java源码包---java 源码 大量 实例

    Java日期选择控件完整源代码 14个目标文件 内容索引:JAVA源码,系统相关,日历,日期选择  Java语言开发的简洁实用的日期选择控件,源码文件功能说明:  [DateChooser.java] Java 日期选择控件(主体类) [public]  ...

    JAVA上百实例源码以及开源项目源代码

    Java日期选择控件完整源代码 14个目标文件 内容索引:JAVA源码,系统相关,日历,日期选择  Java语言开发的简洁实用的日期选择控件,源码文件功能说明:  [DateChooser.java] Java 日期选择控件(主体类) [public]  ...

    Java开发详解.zip

    031106_【第11章:Java常用类库】_日期操作类(DateFormat、SimpleDateFormat)笔记.pdf 031107_〖第11章:Java常用类库〗_实例操作:取得当前日期笔记.pdf 031108_【第11章:Java常用类库】_Math与Random类笔记.pdf...

    java源码包2

    Java日期选择控件完整源代码 14个目标文件 内容索引:JAVA源码,系统相关,日历,日期选择  Java语言开发的简洁实用的日期选择控件,源码文件功能说明:  [DateChooser.java] Java 日期选择控件(主体类) [public] ...

    JAVA上百实例源码以及开源项目

    Java日期选择控件完整源代码 14个目标文件 内容索引:JAVA源码,系统相关,日历,日期选择  Java语言开发的简洁实用的日期选择控件,源码文件功能说明:  [DateChooser.java] Java 日期选择控件(主体类) [public]  ...

    java源码包4

    Java日期选择控件完整源代码 14个目标文件 内容索引:JAVA源码,系统相关,日历,日期选择  Java语言开发的简洁实用的日期选择控件,源码文件功能说明:  [DateChooser.java] Java 日期选择控件(主体类) [public] ...

    java源码包3

    Java日期选择控件完整源代码 14个目标文件 内容索引:JAVA源码,系统相关,日历,日期选择  Java语言开发的简洁实用的日期选择控件,源码文件功能说明:  [DateChooser.java] Java 日期选择控件(主体类) [public] ...

    hello-java:Java的一些基础代码样例:微基准测试,内嵌的WebServer,Gof设计模式等

    你好java本Java项目用来验证一些常用代码的最佳实践写法HTTP服务器HTTP客户端IPv4 long2ip ip2long退房git clone https://github.com/zhaoming-mike/hello-java.git 跑步mvn clean install exec:java mvn clean ...

    常用的java操作代码,获取IP,写cookie,日期转换计算

    常用的java操作代码,获取IP,写cookie,日期转换,去除html代码,时间计算等

    java底层代码:泛型DAO+SSH+Proxool连接池+国际化语言

    4、包含常用的工具:jquery、easy-ui、日期控件、highcharts图表控件、图片放大工具、富文本框等。 此代码包含了所有的jar包,用eclipse导入项目即可。 数据库定义在proxool.properties可自行修改。 国际化字符转换...

    成百上千个Java 源码DEMO 4(1-4是独立压缩包)

    Java日期选择控件完整源代码 14个目标文件 内容索引:JAVA源码,系统相关,日历,日期选择 Java语言开发的简洁实用的日期选择控件,源码文件功能说明: [DateChooser.java] Java 日期选择控件(主体类) [public] ...

    Java DateHandler日期处理程序

    Java源码:DateHandler日期时间计算处理类文件,包括了一些常用的处理函数,比如计算是否是季度末,计算从现在开始几天后的时间,带格式的日期,得到当前时间,用于文件名,没有特殊字符,使用yyyyMMddHHmmss格式,...

    保存java api、常用工具、一般的api试用代码.rar

    Java API(Java Application Programming Interface)是Java应用程序编程接口的缩写,Java中的API,就是...java.util:该包中主要包含一些实用的工具类,比如集合框架类、日期处理类、字符串解析类、随机数生成类等。

    JavaLib:Java开发,常用工具类

    目标:无侵入性,轻量级,常用功能,无数次测试,不断完善注意:JavaLib基于jdk8开发,如果你的jdk版本过低,请找到相应的工具类,复制相关代码,进行使用。快速开始添加如下依赖:&lt;dependency&gt; &lt;groupId&gt;...

    java源程序 课件 常用类 抽象类与接口 图形用户界面 多线程反射 泛型 时间日期类 数组 异常处理 字符串类与正则表达

    java源程序 课件 常用类 抽象类与接口 图形用户界面 多线程反射 泛型 时间日期类 数组 异常处理 字符串类与正则表达等相关知识的ppt课件和源程序代码,是初学者的帮手,包含了Java所需的所有知识点。。。。

Global site tag (gtag.js) - Google Analytics