package com.icinfo.hxbusi.synch.client.task;
import java.text.ParsePosition;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.Locale;
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;
// 计算当前月份的最大天数
public static int findMaxDayInMonth() {
return findMaxDayInMonth(0, 0);
}
//计算指定日期月份的最大天数
public static int findMaxDayInMonth(Date date) {
if (date == null) {
return 0;
}
return findMaxDayInMonth(date2Calendar(date));
}
// 计算指定日历月份的最大天数
public static int findMaxDayInMonth(Calendar calendar) {
if (calendar == null) {
return 0;
}
return calendar.getActualMaximum(Calendar.DAY_OF_MONTH);
}
// 计算当前年某月份的最大天数
public static int findMaxDayInMonth(int month) {
return findMaxDayInMonth(0, month);
}
// 计算某年某月份的最大天数
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
public static Date calendar2Date(Calendar calendar) {
if (calendar == null) {
return null;
}
return calendar.getTime();
}
// Date 转换为 Calendar
public static Calendar date2Calendar(Date date) {
if (date == null) {
return null;
}
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
return calendar;
}
// 拿到默认格式的SimpleDateFormat
public static SimpleDateFormat getSimpleDateFormat() {
return getSimpleDateFormat(null);
}
// 拿到指定输出格式的SimpleDateFormat
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;
}
// 转换当前时间为默认格式
public static String formatDate2Str() {
return formatDate2Str(new Date());
}
// 转换指定时间为默认格式
public static String formatDate2Str(Date date) {
return formatDate2Str(date, C_TIME_PATTON_DEFAULT);
}
// 转换指定时间为指定格式
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
public static Date formatStr2Date(String dateStr) {
return formatStr2Date(dateStr, null);
}
// 转换指定格式的时间为Date
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));
}
// 转换默认格式的时间为指定格式时间
public static String formatDefault2Define(String dateStr, String defineFormat) {
return formatSource2Target(dateStr, C_TIME_PATTON_DEFAULT, defineFormat);
}
// 转换源格式的时间为目标格式时间
public static String formatSource2Target(String dateStr, String sourceFormat, String targetFormat) {
Date date = formatStr2Date(dateStr, sourceFormat);
return formatDate2Str(date, targetFormat);
}
// 计算当天是该年中的第几周
public static int findWeeksNoInYear() {
return findWeeksNoInYear(new Date());
}
// 计算指定日期是该年中的第几周
public static int findWeeksNoInYear(Date date) {
if (date == null) {
return 0;
}
return findWeeksNoInYear(date2Calendar(date));
}
// 计算指定日历是该年中的第几周
public static int findWeeksNoInYear(Calendar calendar) {
if (calendar == null) {
return 0;
}
return calendar.get(Calendar.WEEK_OF_YEAR);
}
//计算一年中的第几星期是几号
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)
public static Date dayBefore2Date(int days) {
Date date = new Date();
return dayBefore2Object(days, null, date);
}
// 相对于当前日期的前几天(days < 000000)或者后几天(days > 0)
public static String dayBefore2Str(int days) {
String string = formatDate2Str();
return dayBefore2Object(days, null, string);
}
// 相对于当前日期的前几天(days < 000000)或者后几天(days > 0)
@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)
public static Date defineDayBefore2Date(Date date, int days) {
Date dateInstance = new Date();
return defineDayBefore2Object(date, days, null, dateInstance);
}
// 相对于指定日期的前几天(days < 000000)或者后几天(days > 0)
public static String defineDayBefore2Str(Date date, int days) {
String stringInstance = formatDate2Str();
return defineDayBefore2Object(date, days, null, stringInstance);
}
// 相对于指定日期的前几天(days < 000000)或者后几天(days > 0)
@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)时间
public static Date monthBefore2Date(int months) {
Date date = new Date();
return monthBefore2Object(months, null, date);
}
// 相对于当前日期的前几月(months < 000000)或者后几月(months > 0)时间
public static String monthBefore2Str(int months) {
String string = formatDate2Str();
return monthBefore2Object(months, null, string);
}
// 相对于当前日期的前几月(months < 000000)或者后几月(months > 0)时间
@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)时间
public static Date defineMonthBefore2Date(Date date, int months) {
Date dateInstance = new Date();
return defineMonthBefore2Object(date, months, null, dateInstance);
}
// 相对于指定日期的前几月(months < 000000)或者后几月(months > 0)时间
public static String defineMonthBefore2Str(Date date, int months) {
String stringInstance = formatDate2Str();
return defineMonthBefore2Object(date, months, null, stringInstance);
}
// 相对于指定日期的前几月(months < 000000)或者后几月(months > 0)时间
@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;
}
// 计算两个日期直接差的天数
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);
}
// 计算两个日期直接差的天数
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-10-22", "yyyy-MM-dd"));
Calendar secondC = date2Calendar(formatStr2Date("2009-07-18", "yyyy-MM-dd"));
System.out.println(caculate2Days(firstC, secondC));
Calendar d1 = Calendar.getInstance(Locale.UK);
d1.set(2008, 12, 7);
for (int i = 1; i < 365; i++) {
d1.add(Calendar.DATE, 1);
// int year = d1.get(Calendar.YEAR);//获取年份
// int month=[color=blue][/color]d1.get(Calendar.MONTH);//获取月份
// int day=d1.get(Calendar.DATE);//获取日
// String jhrq = year+"-"+(month<10?"0"+month:month)+"-"+(day<10?"0"+day:day);
System.out.println(defineDayBefore2Str(formatStr2Date("2009-07-22", "yyyy-MM-dd"), i));
}
分享到:
相关推荐
《精通JAVA——JDK》是一本深度探讨Java编程语言及其开发工具集JDK的专业教程,旨在帮助Java开发者提升技能,实现技术的精进。作为Java的基石,JDK(Java Development Kit)是学习和开发Java应用程序必不可少的工具...
透视JAVA——反编译、修补和逆向工程技术 (2011 年度畅销榜NO.2065 ) 特别说明:此书内容不全,为部分图书截图,但是内有在线阅读网址,希望对您有用!
综上所述,实现“java——农历表达类”涉及到的不仅仅是编写代码,还包括对日期处理的理解、类设计、用户交互、异常处理、测试验证等多个方面的知识。在实际开发中,应确保代码的清晰性和可维护性,同时兼顾性能和...
属于时间转换工具类文件,其中包含格式转换,时区转换,时间计算等。
java————23种设计模式-UML-类图及对应示例代码.doc
java毕业设计——文本编辑器.zip java毕业设计——文本编辑器.zip java毕业设计——文本编辑器.zip java毕业设计——文本编辑器.zip java毕业设计——文本编辑器.zip java毕业设计——文本编辑器.zip java毕业设计...
Java 中的字符串处理 在 Java 中,字符串是使用 String 类来表示的。我们可以使用字符串的 '+' 运算符来连接字符串。在本例中,我们使用字符串来输出结果。 本例中我们使用 Java 语言来求解二次方程,通过输入输出...
java毕业设计——基于java的五子棋游戏的设计与开发(源代码+论文).zip java毕业设计——基于java的五子棋游戏的设计与开发(源代码+论文).zip java毕业设计——基于java的五子棋游戏的设计与开发(源代码+论文).zip ...
【Java——Demo智能火车票购票系统源码】是一个基于Java编程语言开发的示例项目,旨在展示如何构建一个简单的火车票预订系统。该系统利用了数据库技术,具体使用了MySQL作为后台数据存储,并且通过Java的JDBC(Java ...
java毕业设计——基于java的安全电子商务系统的的设计与实现.zip java毕业设计——基于java的安全电子商务系统的的设计与实现.zip java毕业设计——基于java的安全电子商务系统的的设计与实现.zip java毕业设计——...
清华大学的Java学习内容 轻而易举学会Java
java毕业设计——java公共资源模块的设计与开发(源代码+论文).zip java毕业设计——java公共资源模块的设计与开发(源代码+论文).zip java毕业设计——java公共资源模块的设计与开发(源代码+论文).zip java毕业设计...
java毕业设计——java作业管理系统的设计与实现(源代码+论文).zip java毕业设计——java作业管理系统的设计与实现(源代码+论文).zip java毕业设计——java作业管理系统的设计与实现(源代码+论文).zip java毕业设计...
这份“java基础——————试题库”资源旨在帮助学习者系统地复习和深入理解Java的基础知识,确保他们能够全方位地掌握这一强大的编程工具。下面将详细阐述Java的基础知识点。 1. **Java简介** - Java是由Sun ...
java毕业设计——java游戏设计打飞机程序设计与开发(源代码+论文).zip java毕业设计——java游戏设计打飞机程序设计与开发(源代码+论文).zip java毕业设计——java游戏设计打飞机程序设计与开发(源代码+论文).zip ...
java毕业设计——java+mysql crm客户关系管理系统的设计与实现.zip java毕业设计——java+mysql crm客户关系管理系统的设计与实现.zip java毕业设计——java+mysql crm客户关系管理系统的设计与实现.zip java毕业...
java毕业设计——java文件压缩与解压缩实践设计与开发(源代码+论文).zip java毕业设计——java文件压缩与解压缩实践设计与开发(源代码+论文).zip java毕业设计——java文件压缩与解压缩实践设计与开发(源代码+论文)....
java毕业设计——Java聊天室的设计与实现(论文+开题报告+答辩PPT+源代码+数据库+讲解视频).zip java毕业设计——Java聊天室的设计与实现(论文+开题报告+答辩PPT+源代码+数据库+讲解视频).zip java毕业设计——...
该软件是本人在学习JAVA编程时为了方便而特地用C++编写的一个免安装JAVA编程辅助工具。它主要适用于那些 讨厌使用大型集成开发工具学习JAVA的初学者。而且对于初学者来说,本人建议不要使用大型集成工具,因为这样 ...