`
yangtao309
  • 浏览: 66497 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

web开发中公用组件的开发之一---------DateUtils

阅读更多
web开发中公用组件的开发之一---------DateUtils

在web应用中我们经常要到用到对日期的操作
已经有很多的开源代码供选择,例如apache 就有
不是太复杂就是不太适合中国国情的,反正项目中很少用到apache的公用组件包

下面是我在web开发中常用的些方法操作
现简单列举出来,已示记念。


package com.chinadim.test.utils;

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


/**
 * xxxxx
 * xxxxxx
 */
public class DateUtils {
	
	/**
	 * 静态常量
	 */
	public static final String C_TIME_PATTON_DEFAULT = "yyyy-MM-dd HH:mm:ss";
	public static final String C_DATE_PATTON_DEFAULT = "yyyy-MM-dd";
	
	public static final int C_ONE_SECOND = 1000;
	public static final int C_ONE_MINUTE = 60 * C_ONE_SECOND;
	public static final long C_ONE_HOUR = 60 * C_ONE_MINUTE;
	public static final long C_ONE_DAY = 24 * C_ONE_HOUR;
	
	/**
	 * 计算当前月份的最大天数
	 * @return
	 */
	public static int findMaxDayInMonth() {
		return findMaxDayInMonth(0, 0);
	}
	
	/**
	 * 计算指定日期月份的最大天数
	 * @param date
	 * @return
	 */
	public static int findMaxDayInMonth(Date date) {
		if (date == null) {
			return 0;
		}
		return findMaxDayInMonth(date2Calendar(date));
	}
	
	/**
	 * 计算指定日历月份的最大天数
	 * @param calendar
	 * @return
	 */
	public static int findMaxDayInMonth(Calendar calendar) {
		if (calendar == null) {
			return 0;
		}
		
		return calendar.getActualMaximum(Calendar.DAY_OF_MONTH);
	}
	
	/**
	 * 计算当前年某月份的最大天数
	 * @param month
	 * @return
	 */
	public static int findMaxDayInMonth(int month) {
		return findMaxDayInMonth(0, month);
	}
	
	/**
	 * 计算某年某月份的最大天数
	 * @param year
	 * @param month
	 * @return
	 */
	public static int findMaxDayInMonth(int year, int month) {
		Calendar calendar = Calendar.getInstance();
		if (year > 0) {
			calendar.set(Calendar.YEAR, year);
		}
		
		if (month > 0) {
			calendar.set(Calendar.MONTH, month - 1);
		}
		
		return findMaxDayInMonth(calendar);
	}
	
	/**
	 * Calendar 转换为 Date
	 * @param calendar
	 * @return
	 */
	public static Date calendar2Date(Calendar calendar) {
		if (calendar == null) {
			return null;
		}
		return calendar.getTime();
	}
	
	/**
	 * Date 转换为 Calendar
	 * @param date
	 * @return
	 */
	public static Calendar date2Calendar(Date date) {
		if (date == null) {
			return null;
		}
		Calendar calendar = Calendar.getInstance();
		calendar.setTime(date);
		return calendar;
	}
	
	/**
	 * 拿到默认格式的SimpleDateFormat
	 * @return
	 */
	public static SimpleDateFormat getSimpleDateFormat() {
		return getSimpleDateFormat(null);
	}
	
	/**
	 * 拿到指定输出格式的SimpleDateFormat
	 * @param format
	 * @return
	 */
	public static SimpleDateFormat getSimpleDateFormat(String format) {
		SimpleDateFormat sdf;
		if (format == null) {
			sdf = new SimpleDateFormat(C_TIME_PATTON_DEFAULT);
		} else {
			sdf = new SimpleDateFormat(format);
		}
		
		return sdf;
	}
	
	/**
	 * 转换当前时间为默认格式
	 * @return
	 */
	public static String formatDate2Str() {
		return formatDate2Str(new Date());
	}
	
	/**
	 * 转换指定时间为默认格式
	 * @param date
	 * @return
	 */
	public  static String formatDate2Str(Date date) {
		return formatDate2Str(date, C_TIME_PATTON_DEFAULT);
	}
	
	/**
	 * 转换指定时间为指定格式
	 * @param date
	 * @param format
	 * @return
	 */
	public static String formatDate2Str(Date date, String format) {
		if (date == null) {
			return null;
		}
		
		if (format == null || format.equals("")) {
			format = C_TIME_PATTON_DEFAULT;
		}
		SimpleDateFormat sdf = getSimpleDateFormat(format);
		return sdf.format(date);
	}
	
	/**
	 * 转换默认格式的时间为Date
	 * @param dateStr
	 * @return
	 */
	public static Date formatStr2Date(String dateStr) {
		return formatStr2Date(dateStr, null);
	}
	
	/**
	 * 转换指定格式的时间为Date
	 * @param dateStr
	 * @param format
	 * @return
	 */
	public static Date formatStr2Date(String dateStr, String format) {
		if (dateStr == null) {
			return null;
		}
		
		if (format == null || format.equals("")) {
			format = C_TIME_PATTON_DEFAULT;
		}
		SimpleDateFormat sdf = getSimpleDateFormat(format);
		return sdf.parse(dateStr, new ParsePosition(0));
	}
	
	/**
	 * 转换默认格式的时间为指定格式时间
	 * @param dateStr
	 * @param defineFormat
	 * @return
	 */
	public static String formatDefault2Define(String dateStr, String defineFormat) {
		return formatSource2Target(dateStr, C_TIME_PATTON_DEFAULT, defineFormat);
	}
	
	/**
	 * 转换源格式的时间为目标格式时间
	 * @param dateStr
	 * @param sourceFormat
	 * @param targetFormat
	 * @return
	 */
	public static String formatSource2Target(String dateStr, String sourceFormat, String targetFormat) {
		Date date = formatStr2Date(dateStr, sourceFormat);
		return formatDate2Str(date, targetFormat);
	}
	
	/**
	 * 计算当天是该年中的第几周
	 * @return
	 */
	public static int findWeeksNoInYear() {
		return findWeeksNoInYear(new Date());
	}
	
	/**
	 * 计算指定日期是该年中的第几周
	 * @param date
	 * @return
	 */
	public static int findWeeksNoInYear(Date date) {
		if (date == null) {
			return 0;
		}
		return findWeeksNoInYear(date2Calendar(date));
	}
	
	/**
	 * 计算指定日历是该年中的第几周
	 * @param calendar
	 * @return
	 */
	public static int findWeeksNoInYear(Calendar calendar) {
		if (calendar == null) {
			return 0;
		}
		return calendar.get(Calendar.WEEK_OF_YEAR);
	}
	
	/**
	 * 计算一年中的第几星期是几号 
	 * @param year
	 * @param weekInYear
	 * @param dayInWeek
	 * @return
	 */
	public static Date findDateInWeekOnYear(int year, int weekInYear, int dayInWeek) {
		Calendar calendar = Calendar.getInstance();
		if (year > 0) {
			calendar.set(Calendar.YEAR, year);
		}
		
		calendar.set(Calendar.WEEK_OF_YEAR, weekInYear);
		calendar.set(Calendar.DAY_OF_WEEK, dayInWeek);
		
		return calendar.getTime();
	}
	
	/**
	 * 相对于当前日期的前几天(days < 000000)或者后几天(days > 0)
	 * @param days
	 * @return
	 */
	public static Date dayBefore2Date(int days) { 
		Date date = new Date();
		return dayBefore2Object(days, null, date);
	}
	
	/**
	 * 相对于当前日期的前几天(days < 000000)或者后几天(days > 0)
	 * @param days
	 * @return
	 */
	public static String dayBefore2Str(int days) {
		String string = formatDate2Str();
		return dayBefore2Object(days, null, string);
	}
	
	/**
	 * 相对于当前日期的前几天(days < 000000)或者后几天(days > 0)
	 * @param days
	 * @param format
	 * @param instance
	 */
	@SuppressWarnings("unchecked")
	public static <T extends Object> T dayBefore2Object(int days, String format, T instance) {
		Calendar calendar = Calendar.getInstance();
		if (days == 0) {
			return null;
		}
		
		if (format == null || format.equals("")) {
			format = C_TIME_PATTON_DEFAULT;
		}
		
		calendar.add(Calendar.DATE, days);
		if (instance instanceof Date) {
			return (T)calendar.getTime();
		} else if (instance instanceof String) {
			return (T)formatDate2Str(calendar2Date(calendar), format);
		}
		return null;
	}
	
	/**
	 * 相对于指定日期的前几天(days < 000000)或者后几天(days > 0)
	 * @param date
	 * @param days
	 * @return
	 */
	public static Date defineDayBefore2Date(Date date, int days) {
		Date dateInstance = new Date();
		return defineDayBefore2Object(date, days, null, dateInstance);
	}
	
	/**
	 * 相对于指定日期的前几天(days < 000000)或者后几天(days > 0)
	 * @param date
	 * @param days
	 * @return
	 */
	public static String defineDayBefore2Str(Date date, int days) {
		String stringInstance = formatDate2Str();
		return defineDayBefore2Object(date, days, null, stringInstance);
	}
	
	/**
	 * 相对于指定日期的前几天(days < 000000)或者后几天(days > 0)
	 * @param <T>
	 * @param date
	 * @param days
	 * @param format
	 * @param instance
	 * @return
	 */
	@SuppressWarnings("unchecked")
	public static <T extends Object> T defineDayBefore2Object(Date date, 
			int days, String format, T instance) {
		if (date == null || days == 0) {
			return null;
		}
		
		if (format == null || format.equals("")) {
			format = C_TIME_PATTON_DEFAULT;
		}
		
		Calendar calendar = date2Calendar(date);
		calendar.add(Calendar.DATE, days);
		if (instance instanceof Date) {
			return (T)calendar.getTime();
		} else if (instance instanceof String) {
			return (T)formatDate2Str(calendar2Date(calendar), format);
		}
		return null;
	}
	
	/**
	 * 相对于当前日期的前几月(months < 000000)或者后几月(months > 0)时间
	 * @param months
	 * @return
	 */
	public static Date monthBefore2Date(int months) {
		Date date = new Date();
		return monthBefore2Object(months, null, date);
	}
	
	/**
	 * 相对于当前日期的前几月(months < 000000)或者后几月(months > 0)时间
	 * @param months
	 * @return
	 */
	public static String monthBefore2Str(int months) {
		String string = formatDate2Str();
		return monthBefore2Object(months, null, string);
	}
	
	/**
	 * 相对于当前日期的前几月(months < 000000)或者后几月(months > 0)时间
	 * @param <T>
	 * @param months
	 * @param format
	 * @param instance
	 */
	@SuppressWarnings("unchecked")
	public static <T extends Object> T monthBefore2Object(int months, String format, T instance) {
		if (months == 0) {
			return null;
		}
		
		if (format == null || format.equals("")) {
			format = C_TIME_PATTON_DEFAULT;
		}
		Calendar calendar = Calendar.getInstance();
		calendar.add(Calendar.MONTH, months);
		
		if (instance instanceof Date) {
			return (T)calendar.getTime();
		} else if (instance instanceof String) {
			return (T)formatDate2Str(calendar2Date(calendar), format);
		}
		
		return null;
	}
	
	/**
	 * 相对于指定日期的前几月(months < 000000)或者后几月(months > 0)时间
	 * @param date
	 * @param months
	 * @return
	 */
	public static Date defineMonthBefore2Date(Date date, int months) {
		Date dateInstance = new Date();
		return defineMonthBefore2Object(date, months, null, dateInstance);
	}
	
	/**
	 * 相对于指定日期的前几月(months < 000000)或者后几月(months > 0)时间
	 * @param date
	 * @param months
	 * @return
	 */
	public static String defineMonthBefore2Str(Date date, int months) {
		String stringInstance = formatDate2Str();
		return defineMonthBefore2Object(date, months, null, stringInstance);
	}
	
	/**
	 * 相对于指定日期的前几月(months < 000000)或者后几月(months > 0)时间
	 * @param <T>
	 * @param date
	 * @param months
	 * @param format
	 * @param instance
	 * @return
	 */
	@SuppressWarnings("unchecked")
	public static <T extends Object> T defineMonthBefore2Object(Date date,
			int months, String format, T instance) {
		if (months == 0) {
			return null;
		}
		
		if (format == null || format.equals("")) {
			format = C_TIME_PATTON_DEFAULT;
		}
		
		Calendar calendar = date2Calendar(date);
		calendar.add(Calendar.MONTH, months);
		
		if (instance instanceof Date) {
			return (T)calendar.getTime();
		} else if (instance instanceof String) {
			return (T)formatDate2Str(calendar2Date(calendar), format);
		}
		
		return null;
	}
	
	/**
	 * 计算两个日期直接差的天数
	 * @param firstDate
	 * @param secondDate
	 * @return
	 */
	public static int caculate2Days(Date firstDate, Date secondDate) {
		Calendar calendar = Calendar.getInstance();
		calendar.setTime(firstDate);
		int dayNum1 = calendar.get(Calendar.DAY_OF_YEAR);
		calendar.setTime(secondDate);
		int dayNum2 = calendar.get(Calendar.DAY_OF_YEAR);
		return Math.abs(dayNum1 - dayNum2);
	}
	
	/**
	 * 计算两个日期直接差的天数
	 * @param firstCalendar
	 * @param secondCalendar
	 * @return
	 */
	public static int caculate2Days(Calendar firstCalendar, Calendar secondCalendar) {
		if (firstCalendar.after(secondCalendar)) {
			Calendar calendar = firstCalendar;
			firstCalendar = secondCalendar;
			secondCalendar = calendar;
		}
		
		long calendarNum1 = firstCalendar.getTimeInMillis();
		long calendarNum2 = secondCalendar.getTimeInMillis();
		return Math.abs((int)((calendarNum1 - calendarNum2)/C_ONE_DAY));
	}
	
	public static void main(String[] args) {
//		System.out.println("当前月份的最大天数:" + findMaxDayInMonth(new Date()));
//		System.out.println("6月份的最大天数:" + findMaxDayInMonth(6));
//		System.out.println("1999-02月份的最大天数:" + findMaxDayInMonth(1999, 2));
//		System.out.println("2000-02月份的最大天数:" + findMaxDayInMonth(2000, 2));
		
//		System.out.println(formatSource2Target("2009-07-24 11:02:35", null, "yyyy/MM/dd"));
//		System.out.println(findWeeksNoInYear());
		
//		System.out.println("2003年的第30个星期一是那天:" + findDateInWeekOnYear(2003, 30, Calendar.MONDAY));
//		System.out.println("2009年的第30个星期一是那天:" + findDateInWeekOnYear(2009, 30, Calendar.FRIDAY));
		
//		System.out.println("【日期格式】当前日期的前7天是:" + dayBefore2Date(-7));
//		System.out.println("【字符格式】当前日期的前7天是:" + dayBefore2Str(-7));
//		System.out.println("【日期格式】当前日期的后7天是:" + dayBefore2Date(7));
//		System.out.println("【字符格式】当前日期的后7天是:" + dayBefore2Str(7));
		
//		System.out.println(formatStr2Date("2009-07-22", "yyyy-MM-dd"));
		
//		System.out.println("【日期格式】2009-07-22的前7天是:" + 
//				defineDayBefore2Date(formatStr2Date("2009-07-22", "yyyy-MM-dd"), -7));
//		System.out.println("【字符格式】2009-07-22的前7天是:" + 
//				defineDayBefore2Str(formatStr2Date("2009-07-22", "yyyy-MM-dd"), -7));
//		System.out.println("【日期格式】2009-07-22的后7天是:" + 
//				defineDayBefore2Date(formatStr2Date("2009-07-22", "yyyy-MM-dd"), 7));
//		System.out.println("【字符格式】2009-07-22的后7天是:" + 
//				defineDayBefore2Str(formatStr2Date("2009-07-22", "yyyy-MM-dd"), 7));
		
//		System.out.println("【日期格式】相对于当前时间的前2月日期是:" + monthBefore2Date(-2));
//		System.out.println("【字符格式】相对于当前时间的前2月日期是:" + monthBefore2Date(-2));
//		System.out.println("【日期格式】相对于当前时间的后2月日期是:" + monthBefore2Date(2));
//		System.out.println("【字符格式】相对于当前时间的后2月日期是:" + monthBefore2Date(2));
		
//		System.out.println("【日期格式】2009-07-22的前2月日期是:" + 
//				defineMonthBefore2Date(formatStr2Date("2009-07-22", "yyyy-MM-dd"), -2));
//		System.out.println("【字符格式】2009-07-22的前2月日期是:" +
//				defineMonthBefore2Date(formatStr2Date("2009-07-22", "yyyy-MM-dd"), -2));
//		System.out.println("【日期格式】2009-07-22的后2月日期是:" + 
//				defineMonthBefore2Date(formatStr2Date("2009-07-22", "yyyy-MM-dd"), 2));
//		System.out.println("【字符格式】2009-07-22的后2月日期是:" + 
//				defineMonthBefore2Date(formatStr2Date("2009-07-22", "yyyy-MM-dd"), 2));
		
//		Date firstDate = formatStr2Date("2009-07-22", "yyyy-MM-dd");
//		Date secondDate = formatStr2Date("2009-07-18", "yyyy-MM-dd");
//		System.out.println(caculate2Days(firstDate, secondDate));
		
		Calendar firstC = date2Calendar(formatStr2Date("2009-07-22", "yyyy-MM-dd"));
		Calendar secondC = date2Calendar(formatStr2Date("2009-07-18", "yyyy-MM-dd"));
		System.out.println(caculate2Days(firstC, secondC));
	}
}




====
先占个位 还未晚 手头还有事情 先记述到这里
后面后陆续的完成

====
好了 最后都发布完了 欢迎讨论

坚持做一点点自己喜欢的事情 会慢慢的成为自己的事业
分享到:
评论

相关推荐

    PyPI 官网下载 | dateutils-0.6.9-py2.py3-none-any.whl

    资源来自pypi官网。 资源全名:dateutils-0.6.9-py2.py3-none-any.whl

    PyPI 官网下载 | dateutils-0.6.11.tar.gz

    日期时间处理在编程中是一项基础且重要的任务,Python 作为一门功能丰富的编程语言,提供了多种方式来处理日期和时间。`dateutils` 是一个 Python 库,专门用于增强 Python 的日期和时间处理能力,它提供了许多实用...

    java时间处理工具类--DateUtils

    public class DateUtils { /** * 时间范围:年 */ public static final int YEAR = 1; /** * 时间范围:季度 */ public static final int QUARTER = 2; /** * 时间范围:月 */ public static ...

    Jeeplus源码-内置组件讲解

    JeePlus是一个基于Spring Boot的快速开发框架,它为Java开发者提供了一系列内置组件,以简化常见的开发任务,提高开发效率。本文将深入讲解JeePlus中的一些核心组件及其功能。 1. 常用组件 JeePlus提供了多种常用...

    自己封装的DateUtils工具类

    在Java编程中,DateUtils工具类是一个非常实用的辅助类,它封装了各种日期和时间处理的方法,大大简化了开发者在处理日期时的工作。这里我们深入探讨一下自定义的DateUtils工具类及其重要功能。 首先,`DateUtils`...

    DateUtils:DateUtils-开源

    纯Java日历实用程序,带有日期字段和可导航日历。 实际版本:0.9(11月23日)现在,允许选择规则... 带有日期范围选择的下一版本(0.95)将在本月(03/2012)发布,但很难。 结果将是惊人的,所以不要为延迟而生气,

    时间工具类 DateUtils

    总的来说,`DateUtils` 类是Java开发中的一个实用工具,它提供了丰富的日期时间处理功能,而`Lunar` 类则扩展了对农历日期的支持。合理使用这两个类,可以有效地管理和操作日期和时间,提高代码的可读性和可维护性。...

    ezService分布式应用快速开发工具

    集快速服务设计、服务即时发布、安全管理、跨系统协作于一身,是中小型分布式关系型数据库应用开发的一揽子解决方案,适应于快速搭建完备可靠的应用系统。 ezService所开发的应用服务定义,可以被立即登记到服务...

    DateUtils.java

    `DateUtils.java` 是一个Java编程中的自定义工具类,专门用于处理日期和时间相关的操作。在Java开发中,处理日期和时间是非常常见的需求,例如计算两个日期之间的差距、格式化日期显示、获取当前时间等。`DateUtils`...

    cors-filter-1.7.jar java-util-1.9.1.jar

    在IT行业中,跨域资源共享(CORS)是一个关键的安全特性,尤其在Web应用程序开发中,它涉及到浏览器的同源策略。同源策略是浏览器的一种安全机制,限制了来自不同源的HTTP请求,以防止恶意网站读取或修改敏感数据。...

    Android-收集了现在app的一些主流组件小框架工具类技巧等

    这篇文本将深入探讨在Android应用开发中常见的主流组件、框架和工具类,以及一些实用的编程技巧。 首先,让我们关注"Android开发-工具类"这一标签。在Android开发中,工具类通常是指那些封装了常见功能、方便开发者...

    commons-lang3-3.1.jar_2021.07.zip

    - 在Web开发中,StringUtils可以帮助处理URL参数,ArrayUtils可以简化数组操作,DateUtils则在处理用户输入的日期时非常有用。 - 在数据处理项目中,NumberUtils的格式化功能可以用于生成用户友好的输出,而Class...

    java组件(DateUtils,EncryptUtil,StringUtils,WordEdit功能,ZipUtils,导出Excel,读写Excel文件)

    Java组件是Java编程中常用的工具类集合,它们提供了各种实用功能,使得开发人员在处理特定任务时更加便捷高效。以下是对这些组件的详细介绍: 1. **DateUtils**: 这个组件专注于日期和时间的处理。它包含了一系列...

    commons-lang3-3.1.jar.zip-java Html解码组件库

    在Web开发中,HTML是一种标记语言,它使用特定的字符实体(如`&amp;`代表`&`)来避免混淆和确保数据的安全性。然而,当需要将这些编码的HTML字符串用于文本显示或处理时,就需要进行解码,将它们转换回原始的可读...

    DateUtils.java工具类很实用

    DateUtils.java工具类很实用

    DateUtils.java 日期处理相关工具类

    * 文件名:DateUtils.java 日期处理相关工具类 * 版本信息:V1.0 * 日期:2013-03-11 * Copyright BDVCD Corporation 2013 * 版权所有 http://www.bdvcd.com */ public class DateUtils { /**定义常量**/ ...

    日期时间处理的命令行工具Dateutils.zip

    Dateutils 包含几个命令行下处理日期时间的工具,特别用于处理大量金融数据。 标签:Dateutils

Global site tag (gtag.js) - Google Analytics