`
yshlin
  • 浏览: 63495 次
  • 性别: 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日期选择控件完整源代码.rar

    综上所述,这份“java源码:Java日期选择控件完整源代码.rar”涵盖了Java日期处理、GUI控件使用、事件处理以及可能的UI布局设计等多个知识点,对提升Java桌面应用开发技能大有裨益。通过对源码的阅读和实践,开发者...

    java常用代码

    本压缩包“java常用代码”集合了一系列基础到进阶的Java代码示例,涵盖了多个关键领域,有助于初学者快速掌握Java编程的核心概念。 1. **遗产算法**:在Java中,继承是面向对象特性之一,它允许一个类(子类)继承...

    Java源代码参考:JAVA库

    它可能包含了各种常用的函数、类和工具,如数据结构、算法、网络通信、文件操作、日期时间处理等模块。这些模块经过优化和封装,可以方便地集成到自己的项目中,提高开发效率。通过研究这个库的源代码,开发者不仅...

    Java中日期处理的代码

    通过以上分析可以看出,示例代码涵盖了 Java 日期处理的基本功能,包括日期格式的定义、日期与字符串之间的转换以及对日期进行操作的方法。这些知识点对于开发人员来说是非常实用的,能够帮助他们在实际项目中高效地...

    Java中对日期的常用处理(转)

    本文将基于标题“Java中对日期的常用处理(转)”来深入探讨Java中的日期处理,结合`DateUtil.java`这个文件名,我们可以推测这是一个包含日期处理工具类的源代码文件。 首先,Java中处理日期的最基础类是`java....

    java常用代码的集合

    以下是对标题“java常用代码的集合”和描述中提及的知识点的详细解释,以及与标签相关的具体代码示例。 1. ISBN验证: ISBN(国际标准书号)是用于唯一标识书籍的编码。在Java中,我们可以编写一个方法来验证一个...

    Java典型应用彻查1000例:Java入门

    8. **Java标准库**:Java标准库(Java API)包含了大量预定义的类和方法,如数学运算、日期时间处理、网络编程等,熟练使用它们能提升开发效率。 9. **JDBC**:Java数据库连接(JDBC)是Java访问数据库的标准API,...

    第一行代码Java源代码第10章课程代码Java常用类

    在本课程中,我们主要探讨的是“第一行代码Java”一书中的第10章,这一章主要聚焦于Java常用类库的使用。通过学习这些类库,开发者能够更高效地进行程序开发,掌握Java的强大功能。以下是本章涉及的一些核心知识点:...

    JAVA处理日期时间常用方法

    总的来说,Java提供了多种处理日期时间的工具,但为了保持代码的现代性和可维护性,应尽可能地使用`java.time`包中的类。同时,理解和掌握`Calendar`和`SimpleDateFormat`的基本用法对于理解旧代码或者在不支持新API...

    Java代码常用技巧

    ### Java代码常用技巧:Oracle数据库表操作返回值处理方法 #### 概述 在实际的软件开发工作中,处理数据库查询结果是一项常见的任务。本篇主要介绍如何利用Java语言结合Oracle数据库进行表操作,并通过示例代码...

    java中的日期处理类总结

    Java中的日期处理涉及到多个类,包括Date、Calendar、GregorianCalendar以及日期格式化类如DateFormat和SimpleDateFormat。这些类主要用于管理、操作和格式化日期和时间。以下是对这些类的详细说明: 1. **Date类**...

    Java常用代码

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

    java日期处理

    Java日期处理是编程中常见的需求,尤其是在开发涉及时间计算、日期格式化或事件调度的应用时。在Java中,处理日期和时间主要依赖于`java.util.Date`、`java.util.Calendar`以及自Java 8引入的`java.time`包中的类。...

    Java常用日期辅助类

    在给定的标题“Java常用日期辅助类”中,我们可以推测这篇博文可能探讨了Java中的一些核心日期处理工具,如`java.util.Date`,`java.time`包中的类,以及自定义的日期助手类`DateHelper.java`。 `java.util.Date`是...

    Java常用代码方法汇总

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

    java源码:Java常用工具包 Jodd.zip

    2. **实用工具类**:了解Jodd提供的各种工具类,如字符串处理、日期时间操作、反射、I/O等,可以提升日常编码效率。 3. **模块化设计**:观察`mod`目录,可以学习如何组织和划分大型项目,以及如何实现模块间的解...

    Java日期常用操作方法工具类

    本文将重点讲解Java日期的常用操作方法,主要基于提供的`JavaDateUtil.java`文件,假设这是一个自定义的日期工具类。 首先,我们来了解`java.util.Date`。这个类在早期的Java版本中被广泛使用,但它的API设计并不...

Global site tag (gtag.js) - Google Analytics