`
acw2000
  • 浏览: 14482 次
  • 性别: Icon_minigender_1
  • 来自: 广州
最近访客 更多访客>>
社区版块
存档分类
最新评论

时间工具类--java

阅读更多
package com.dayatang.utils;

import java.security.InvalidParameterException;
import java.text.ParseException;
import java.util.Calendar;
import java.util.Date;

public class DateUtils {

private static final long MILLIS_IN_A_SECOND = 1000;

private static final long SECONDS_IN_A_MINUTE = 60;

private static final long MINUTES_IN_AN_HOUR = 60;

private static final long HOURS_IN_A_DAY = 24;

private static final int DAYS_IN_A_WEEK = 7;

private static final int MONTHS_IN_A_YEAR = 12;

//private static final int[] daysInMonth = new int[] { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };

/**
* 最小日期,设定为1000年1月1日
*/
public static final Date MIN_DATE = date(1000, 1, 1);

/**
* 最大日期,设定为8888年1月1日
*/
public static final Date MAX_DATE = date(8888, 1, 1);


/**
* 根据年月日构建日期对象。注意月份是从1开始计数的,即month为1代表1月份。
* @param year 年
* @param month 月。注意1代表1月份,依此类推。
* @param day 日
* @return
*/
public static Date date(int year, int month, int date) {
Calendar calendar = Calendar.getInstance();
calendar.set(year, month - 1, date, 0, 0, 0);
calendar.set(Calendar.MILLISECOND, 0);
return calendar.getTime();
}

/**
* 计算两个日期(不包括时间)之间相差的周年数
*
* @param date1
* @param date2
* @return
*/
public static int getYearDiff(Date date1, Date date2) {
if (date1 == null || date2 == null) {
throw new InvalidParameterException(
"date1 and date2 cannot be null!");
}
if (date1.after(date2)) {
throw new InvalidParameterException("date1 cannot be after date2!");
}

Calendar calendar = Calendar.getInstance();
calendar.setTime(date1);
int year1 = calendar.get(Calendar.YEAR);
int month1 = calendar.get(Calendar.MONTH);
int day1 = calendar.get(Calendar.DATE);

calendar.setTime(date2);
int year2 = calendar.get(Calendar.YEAR);
int month2 = calendar.get(Calendar.MONTH);
int day2 = calendar.get(Calendar.DATE);

int result = year2 - year1;
if (month2 < month1) {
result--;
} else if (month2 == month1 && day2 < day1) {
result--;
}
return result;
}

/**
* 计算两个日期(不包括时间)之间相差的整月数
*
* @param date1
* @param date2
* @return
*/
public static int getMonthDiff(Date date1, Date date2) {
if (date1 == null || date2 == null) {
throw new InvalidParameterException(
"date1 and date2 cannot be null!");
}
if (date1.after(date2)) {
throw new InvalidParameterException("date1 cannot be after date2!");
}

Calendar calendar = Calendar.getInstance();
calendar.setTime(date1);
int year1 = calendar.get(Calendar.YEAR);
int month1 = calendar.get(Calendar.MONTH);
int day1 = calendar.get(Calendar.DATE);

calendar.setTime(date2);
int year2 = calendar.get(Calendar.YEAR);
int month2 = calendar.get(Calendar.MONTH);
int day2 = calendar.get(Calendar.DATE);

int months = 0;
if (day2 >= day1) {
months = month2 - month1;
} else {
months = month2 - month1 - 1;
}
return (year2 - year1) * MONTHS_IN_A_YEAR + months;
}

/**
* 统计两个日期之间包含的天数。包含date1,但不包含date2
*
* @param date1
* @param date2
* @return
*/
public static int getDayDiff(Date date1, Date date2) {
if (date1 == null || date2 == null) {
throw new InvalidParameterException(
"date1 and date2 cannot be null!");
}
Date startDate = org.apache.commons.lang3.time.DateUtils.truncate(
date1, Calendar.DATE);
Date endDate = org.apache.commons.lang3.time.DateUtils.truncate(date2,
Calendar.DATE);
if (startDate.after(endDate)) {
throw new InvalidParameterException("date1 cannot be after date2!");
}
long millSecondsInOneDay = HOURS_IN_A_DAY * MINUTES_IN_AN_HOUR
* SECONDS_IN_A_MINUTE * MILLIS_IN_A_SECOND;
return (int) ((endDate.getTime() - startDate.getTime()) / millSecondsInOneDay);
}

/**
* 计算time2比time1晚多少分钟,忽略日期部分
*
* @param time1
* @param time2
* @return
*/
public static int getMinuteDiffByTime(Date time1, Date time2) {
long startMil = 0;
long endMil = 0;
Calendar calendar = Calendar.getInstance();
calendar.setTime(time1);
calendar.set(1900, 1, 1);
startMil = calendar.getTimeInMillis();
calendar.setTime(time2);
calendar.set(1900, 1, 1);
endMil = calendar.getTimeInMillis();
return (int) ((endMil - startMil) / MILLIS_IN_A_SECOND / SECONDS_IN_A_MINUTE);
}

/**
* 计算指定日期的前一天
*
* @param date
* @return
*/
public static Date getPrevDay(Date date) {
return org.apache.commons.lang3.time.DateUtils.addDays(date, -1);
}

/**
* 计算指定日期的后一天
*
* @param date
* @return
*/
public static Date getNextDay(Date date) {
return org.apache.commons.lang3.time.DateUtils.addDays(date, 1);
}

/**
* 判断date1是否在date2之后,忽略时间部分
*
* @param date1
* @param date2
* @return
*/
public static boolean isDateAfter(Date date1, Date date2) {
Date theDate1 = org.apache.commons.lang3.time.DateUtils.truncate(date1,
Calendar.DATE);
Date theDate2 = org.apache.commons.lang3.time.DateUtils.truncate(date2,
Calendar.DATE);
return theDate1.after(theDate2);
}

/**
* 判断date1是否在date2之前,忽略时间部分
*
* @param date1
* @param date2
* @return
*/
public static boolean isDateBefore(Date date1, Date date2) {
return isDateAfter(date2, date1);
}

/**
* 判断time1是否在time2之后,忽略日期部分
*
* @param time1
* @param time2
* @return
*/
public static boolean isTimeAfter(Date time1, Date time2) {
Calendar calendar1 = Calendar.getInstance();
calendar1.setTime(time1);
calendar1.set(1900, 1, 1);
Calendar calendar2 = Calendar.getInstance();
calendar2.setTime(time2);
calendar2.set(1900, 1, 1);
return calendar1.after(calendar2);
}

/**
* 判断time1是否在time2之前,忽略日期部分
*
* @param time1
* @param time2
* @return
*/
public static boolean isTimeBefore(Date time1, Date time2) {
return isTimeAfter(time2, time1);
}

/**
* 判断两个日期是否同一天(忽略时间部分)
*
* @param date1
* @param date2
* @return
*/
public static boolean isSameDay(Date date1, Date date2) {
return org.apache.commons.lang3.time.DateUtils.isSameDay(date1, date2);
}

/**
* 判断两个日历天是否同一天(忽略时间部分)
*
* @param date1
* @param date2
* @return
*/
public static boolean isSameDay(Calendar date1, Calendar date2) {
return org.apache.commons.lang3.time.DateUtils.isSameDay(date1, date2);
}

/**
* 将字符串形式的日期表示解析为日期对象
*
* @param dateString
* @return
*/
public static Date parseDate(String dateString) {
try {
return org.apache.commons.lang3.time.DateUtils.parseDate(
dateString, new String[] { "yyyy-MM-dd", "yyyy-M-d",
"yyyy-MM-d", "yyyy-M-dd" });
} catch (ParseException e) {
return null;
}
}

/**
* 将字符串形式的时间表示解析为日期时间对象
*
* @param timeString
* @return
*/
public static Date parseTime(String timeString) {
try {
return org.apache.commons.lang3.time.DateUtils.parseDate(
timeString, new String[] { "hh:mm:ss", "h:m:s", "hh:mm",
"h:m" });
} catch (ParseException e) {
return null;
}
}

/**
* 将字符串形式的日期时间表示解析为时间对象
*
* @param timeString
* @return
*/
public static Date parseDateTime(String timeString) {
try {
return org.apache.commons.lang3.time.DateUtils.parseDate(
timeString, new String[] { "yyyy-MM-dd HH:mm:ss",
"yyyy-M-d H:m:s", "yyyy-MM-dd H:m:s",
"yyyy-M-d HH:mm:ss" });
} catch (ParseException e) {
return null;
}
}

/**
* 计算两个日期之间包含的星期X的天数。
*
* @param fromDate
*            起始日期
* @param toDate
*            结束日期
* @param dayOfWeek
*            星期,例如星期三,星期四
* @return
*/
public static int getWeekDaysBetween(Date fromDate, Date toDate,
int dayOfWeek) {
int result = 0;
Date firstDate = getFirstWeekdayBetween(fromDate, toDate, dayOfWeek);
if (firstDate == null) {
return 0;
}
Calendar aDay = Calendar.getInstance();
aDay.setTime(firstDate);
while (aDay.getTime().before(toDate)) {
result++;
aDay.add(Calendar.DATE, DAYS_IN_A_WEEK);
}
return result;
}

/**
* 获取在两个日期之间的第一个星期X
*
* @param fromDate
*            起始日期
* @param toDate
*            结束日期
* @param dayOfWeek
*            星期,例如星期三,星期四
* @return
*/
public static Date getFirstWeekdayBetween(Date fromDate, Date toDate,
int dayOfWeek) {
Calendar aDay = Calendar.getInstance();
aDay.setTime(fromDate);
while (aDay.getTime().before(toDate)) {
if (aDay.get(Calendar.DAY_OF_WEEK) == dayOfWeek) {
return aDay.getTime();
}
aDay.add(Calendar.DATE, 1);
}
return null;
}

/**
* 取得参数year指定的年份的总天数
*
* @param year
* @return
*/
public static int getDaysInYear(int year) {
Calendar aDay = Calendar.getInstance();
aDay.set(year, 1, 1);
Date from = aDay.getTime();
aDay.set(year + 1, 1, 1);
Date to = aDay.getTime();
return getDayDiff(from, to);
}

/**
* 取得指定年月的总天数
*
* @param year
* @param month
* @return
*/
public static int getDaysInMonth(int year, int month) {
Calendar aDay = Calendar.getInstance();
aDay.set(year, month, 1);
Date from = aDay.getTime();
if (month == Calendar.DECEMBER) {
aDay.set(year + 1, Calendar.JANUARY, 1);
} else {
aDay.set(year, month + 1, 1);
}
Date to = aDay.getTime();
return getDayDiff(from, to);
}

/**
* 获得指定日期的年份
*
* @param date
* @return
*/
public static int getYear(Date date) {
return getFieldValue(date, Calendar.YEAR);
}

/**
* 获得指定日期的月份
*
* @param date
* @return
*/
public static int getMonth(Date date) {
return getFieldValue(date, Calendar.MONTH) + 1;
}

/**
* 获得指定日期是当年的第几天
*
* @param date
* @return
*/
public static int getDayOfYear(Date date) {
return getFieldValue(date, Calendar.DAY_OF_YEAR);
}

/**
* 获得指定日期是当月的第几天
*
* @param date
* @return
*/
public static int getDayOfMonth(Date date) {
return getFieldValue(date, Calendar.DAY_OF_MONTH);
}

/**
* 获得指定日期是当周的第几天
*
* @param date
* @return
*/
public static int getDayOfWeek(Date date) {
return getFieldValue(date, Calendar.DAY_OF_WEEK);
}

private static int getFieldValue(Date date, int field) {
if (date == null) {
throw new InvalidParameterException("date cannot be null!");
}
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
return calendar.get(field);
}

/**
* 获得指定日期之后一段时期的日期。例如某日期之后3天的日期等。
* @param origDate 基准日期
* @param amount 时间数量
* @param timeUnit 时间单位,如年、月、日等。用Calendar中的常量代表
* @return
*/
public static final Date dateAfter(Date origDate, int amount, int timeUnit) {
Calendar calendar = Calendar.getInstance();
calendar.setTime(origDate);
calendar.add(timeUnit, amount);
return calendar.getTime();
}

/**
* 获得指定日期之前一段时期的日期。例如某日期之前3天的日期等。
* @param origDate 基准日期
* @param amount 时间数量
* @param timeUnit 时间单位,如年、月、日等。用Calendar中的常量代表
* @return
*/
public static final Date dateBefore(Date origDate, int amount, int timeUnit) {
Calendar calendar = Calendar.getInstance();
calendar.setTime(origDate);
calendar.add(timeUnit, -amount);
return calendar.getTime();
}
}
分享到:
评论

相关推荐

    java代码:java工具类-javaUtils多种工具类-正则工具-base64工具等

    除了这两个主要工具类,`javaUtils`文件夹中可能还包含其他类型的工具类,如日期时间工具、字符串处理工具、集合操作工具等。这些工具类通常具有高度封装和可重用性,可以帮助开发者快速实现功能,减少重复代码,...

    java各种工具类-非常齐全

    Java是一种广泛使用的编程语言,其丰富的库和工具类极大地提升了开发效率。在Java中,工具类通常是封装了常见操作的静态方法集合,便于开发者在不同项目中复用。本资源包含了一系列全面的Java工具类,涵盖了多个核心...

    Java实体类字段生成工具类-将数据库表列字段转为Java实体类驼峰字段

    通过使用该工具类,可以大大提高开发效率,节约时间成本。 3、该工具类使用非常简单。只需要复制数据库列名,支持多列复制,执行工具类即可生成对应的Java字段代码。 4、优点:使用代码生成驼峰形式的字段,可以...

    【强2】30个java工具类

    使用java工具类可有效的提高开发效率! 没有CSDN积分的朋友到这里源头下载:http://www.javacs.cn/bbs/thread-382-1-1.html 感谢支持 ...[工具类] 时间工具TimeUtil.java [工具类] 连数据库ConnectDB.java

    redis工具类-Java开发

    Redis 工具类在 Java 开发中的应用 Redis 是一个开源的、高性能的键值存储系统,它支持多种数据结构,如字符串(strings)、散列(hashes)、列表(lists)、集合(sets)以及有序集合(sorted sets)。由于其速度...

    linux实用脚本show-busy-java-threads

    总之,"linux实用脚本show-busy-java-threads"、"show-duplicate-java-classes"以及"find-in-jars"是Java开发者和系统管理员在Linux环境下不可或缺的工具,它们能够有效地帮助我们诊断和优化Java应用程序,提升系统...

    java工具类集合

    Java工具类集合是Java开发中不可或缺的一部分,它们提供了一系列便捷的方法,帮助开发者高效地处理各种常见任务。在Java中,工具类通常被组织在各种包下,如`java.util`、`java.lang`、`java.io`等。下面将详细介绍...

    Java - DateUtil 日期时间转换工具类

    资源名称:DateUtil 日期时间转换工具类 内容概要:日期时间转换工具类,包括基本的Date类型,String类型,TimeStamp类型,LocalDateTime类型,LocalDate类型之间的互相转换,还提供了许多与时间获取,时间计算有关...

    Java-Android工具类

    本资料“Java-Android工具类”显然是一份包含了多种实用工具类的集合,旨在帮助开发者在Java和Android开发过程中节省时间和精力。 首先,我们来探讨一下SD工具类。在Android系统中,外部存储空间(如SD卡)通常用于...

    java时间工具类

    java 时间 datatime 工具类

    30个java工具类

    [工具类] CookieCounter .java.txt [工具类] 验证码img .jsp.txt [工具类] Java中计算任意两个日期之间的工作天数 .java.txt [工具类] java抓取网页...[工具类] 时间工具TimeUtil.java [工具类] 连数据库ConnectDB.java

    Java日期工具类,Java时间工具类,Java时间格式化

    本篇将围绕Java中的日期工具类和时间工具类展开讨论,同时会涉及到日期时间的格式化。 首先,Java 8之前,我们主要依赖`java.util.Date`和`java.text.SimpleDateFormat`这两个类来处理日期和时间。`Date`类用于表示...

    mysql-connector-java-5.1.7-bin.zip

    1. **添加依赖**:在Java项目中,需要将`mysql-connector-java-5.1.7-bin.jar`加入到类路径(classpath)中,对于现代的构建工具如Maven或Gradle,可以在配置文件中添加对应的依赖条目。 2. **建立连接**:在Java...

    mchange-commons-java-0.2.11.jar

    4. 其他通用工具:如字符串处理、日期时间操作、集合操作等实用工具类,简化常见的编程任务。 在实际应用中,开发者可以利用这些工具来提高代码的效率和质量,减少重复工作。例如,通过Mchange Commons的数据库连接...

    常用的java工具类

    4.[工具类] 时间工具TimeUtil.java 5.[工具类] 通信服务端simpleServer 6.[工具类] 使用Java程序来实现HTTP文件的队列下载 .java 7.[工具类] 文件操作工具类 .java 8.[工具类] 序列化保存为XML文件的工具类 .java 9....

    java日期时间工具类超级全

    java日期时间工具类超级全。其中包含:获得当前日期 yyyy-MM-dd HH:mm:ss;获取系统当前时间戳;获取当前日期 yy-MM-dd;得到两个时间差 格式yyyy-MM-dd HH:mm:ss;转化long值的日期为yyyy-MM-dd HH:mm:ss.SSS格式的...

    java日期工具类-各种转换

    各种日期格式化和转换 将 Calendar 转为字符串 获取当前月份的最后一天 根据 timestamp 生成各类时间状态串 计算两个日期之间相差的天数 等等等等

    show-busy-java-threads.sh文件

    `show-busy-java-threads.sh`脚本就是为了帮助开发者快速定位和排查这类性能问题而设计的。这个脚本主要用于监控并展示Java应用程序中的繁忙线程,从而帮助我们理解程序的执行状态,找出可能导致高CPU负载的原因。 ...

    mysql-connector-java-8.0.29.jar

    这可以通过Maven或Gradle等构建工具完成,或者手动将`mysql-connector-java-8.0.29.jar`添加到项目的类路径中。一旦引入,就可以通过以下步骤建立数据库连接: 1. 加载驱动:使用`Class.forName()`方法加载`...

    mysql-connector-java-8.0.11

    - 将`mysql-connector-java-8.0.11.jar`添加到项目的类路径中,可以是IDE的库依赖,或者在命令行运行时通过`-cp`选项指定。 - 使用`Class.forName("com.mysql.cj.jdbc.Driver")`加载驱动。 - 通过`DriverManager....

Global site tag (gtag.js) - Google Analytics