`

DateTimeUtils

 
阅读更多

import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;
import java.util.Locale;

import org.apache.commons.lang3.time.DateUtils;
import org.joda.time.DateTime;
import org.joda.time.Days;
import org.joda.time.Months;
import org.joda.time.Weeks;
import org.joda.time.Years;

import com.achievo.core.exception.DataInvalidException;

public class DateTimeUtils {

public static double LOCAL_TIME_ZONES = 8/24d;

public final static String[] parsePatterns = new String[] {
"yyyy-M-d",
"yyyy-MM-dd",
"yyyy-M-dd",
"yyyy-MM-d",
"yyyy-M-d H:m",
"yyyy-M-d H:mm",
"yyyy-M-d HH:m",
"yyyy-M-d HH:mm",
"yyyy-M-d H:m:s",
"yyyy-MM-dd HH:mm:ss",
"yyyy-M-d H:m:s.S",
"yyyy-MM-dd H:mm",
"yyyy-MM-dd HH:m",
"yyyy-MM-dd HH:mm",
"yyyy-MM-dd HH:mm:ss",
"yyyy-MM-dd HH:mm:ss.S",
"yyyy-MM-dd HH:mm:ss.SS",
"yyyy-MM-dd HH:mm:ss.SSS" };

private final static String[] weekNames = new String[] { "", "一", "二", "三", "四", "五", "六", "日" };

public final static String datePattern = "yyyy-MM-dd";
public final static String timePattern = "yyyy-MM-dd HH:mm:ss";

// public final static DateFormat dateFormat = new SimpleDateFormat(datePattern);
// public final static DateFormat timeFormat = new SimpleDateFormat(timePattern);


/**
* 获取当前系统日历
*
* @return
* @throws IllegalArgumentException
* @see [类、类#方法、类#成员]
*/
public static Calendar getCalendar() {
return Calendar.getInstance();
}

/**
* 获取当前系统时间,应统一调用,可根据用户的具体需求进行修改
*
* @return
* @throws IllegalArgumentException
* @see [类、类#方法、类#成员]
*/
public static Date getDate() {
return getCalendar().getTime();
}

/**
* 获取当前系统时间,返回java.sql.Date
*
* @return
* @throws IllegalArgumentException
* @see [类、类#方法、类#成员]
*/
public static java.sql.Date getSQLDate() {
return toSqlDate(getCalendar().getTime());
}


/**
* 获取当前系统日期
*
* @return
* @throws IllegalArgumentException
* @see [类、类#方法、类#成员]
*/
public static String getToDateString() {
return toDateString(getDate());
}

/**
* 将Date转Calendar
* @param date
* @return
* @see [类、类#方法、类#成员]
*/
public static Calendar toCalendar(Date date){
Calendar c = Calendar.getInstance();
c.setTime(date);
return c;
}

/**
* 按默认样式转换字符串到日期类型
*
* @param text
* @return
* @throws IllegalArgumentException
* @see [类、类#方法、类#成员]
*/
public static Date parseDate(final String text) throws IllegalArgumentException {
return parseDate(text, parsePatterns);
}

/**
* 按自定义样式转换字符串到日期类型
*
* @param text
* @param patterns
* @return
* @throws IllegalArgumentException
* @see [类、类#方法、类#成员]
*/
public static Date parseDate(final String text, final String... patterns) throws DataInvalidException {
try {
boolean parseAble = false;
for (int i = 0; (i < patterns.length) && !parseAble; i++) {
parseAble = (text.length() >= patterns[i].length());
}
if (parseAble) {
return DateUtils.parseDate(text, parsePatterns);
} else {
throw new DataInvalidException("0101010004", text+",日期");
}
} catch (ParseException ex) {
throw new DataInvalidException("0101010005", text+",日期");
}
}

/**
* 转换为日期字符串
*
* @param date
* @return
* @see [类、类#方法、类#成员]
*/
public static String toDateString(final Date date) {
return parseString(date, "yyyy-MM-dd");
}

/**
* 转换为时间字符串
*
* @param date
* @return
* @see [类、类#方法、类#成员]
*/
public static String toTimeString(final Date date) {
return parseString(date, "HH:mm:ss");
}

/**
* 转换为日期时间字符串
*
* @param date
* @return
* @see [类、类#方法、类#成员]
*/
public static String toDateTimeString(final Date date) {
return parseString(date, "yyyy-MM-dd HH:mm:ss");
}

/**
* 转换为指定格式字符串
*
* @param date
* @param pattern
* @return
* @see [类、类#方法、类#成员]
*/
public static String parseString(final Date date, final String pattern) {
if(date == null){
throw new DataInvalidException("0101010001", "日期date");
}
if(pattern == null){
throw new DataInvalidException("0101010001", "日期格式pattern");
}
DateFormat dateFormat = new SimpleDateFormat(pattern, Locale.CHINESE);
return dateFormat.format(date);
}

/**
* 得到星期几(中文)
*
* @param date
* @return
*/
public static String cnWeekDay(Date date) {
return weekNames[getWeekDay(date)];
}

/**
* 得到星期几
*
* @param date
* @return
*/
public static int getWeekDay(Date date) {
if(date == null){
throw new DataInvalidException("0101010001", "日期date");
}
Calendar c = toCalendar(date);
int dayOfWeek = c.get(Calendar.DAY_OF_WEEK) - 1;

dayOfWeek = dayOfWeek==0?7:dayOfWeek;
return dayOfWeek;
}

/**
* 计算begin和end之间的天数
*
* @param begin
* @param end
* @return
* @see [类、类#方法、类#成员]
*/
public static int diffDays(final Date begin, final Date end) {
DateTime jStart = new DateTime(begin);
DateTime jEnd = new DateTime(end);
return Days.daysBetween(jStart, jEnd).getDays();
}

/**
* 计算begin和end之间的周数
*
* @param begin
* @param end
* @return
* @see [类、类#方法、类#成员]
*/
public static int diffWeeks(final Date begin, final Date end) {
DateTime jStart = new DateTime(begin);
DateTime jEnd = new DateTime(end);
return Weeks.weeksBetween(jStart, jEnd).getWeeks();
}

/**
* 计算begin和end之间的月数
*
* @param begin
* @param end
* @return
* @see [类、类#方法、类#成员]
*/
public static int diffMonths(final Date begin, final Date end) {
DateTime jStart = new DateTime(begin);
DateTime jEnd = new DateTime(end);
return Months.monthsBetween(jStart, jEnd).getMonths();
}

/**
* 计算begin和end之间的年数
*
* @param begin
* @param end
* @return
* @see [类、类#方法、类#成员]
*/
public static int diffYears(final Date begin, final Date end) {
DateTime jStart = new DateTime(begin);
DateTime jEnd = new DateTime(end);
return Years.yearsBetween(jStart, jEnd).getYears();
}

/**
* 对date,加上day天
*
* @param date
* @param day
* @return String
* @see [类、类#方法、类#成员]
*/
public static String addDay(final Date date, final int day) {
DateFormat dateFormat = new SimpleDateFormat(datePattern, Locale.CHINESE);
return dateFormat.format(operateDay(date, day));
}

/**
* 对date,加上day天
*
* @param date
* @param day
* @return Date
* @see [类、类#方法、类#成员]
*/
public static Date operateDay(final Date date, final int day) {
// return DateUtils.addDays(date, amount);
Calendar c = toCalendar(date);
c.add(Calendar.DATE, day);
return c.getTime();
}

/**
* 对date,加上month月
*
* @param date
* @param month
* @return String
* @see [类、类#方法、类#成员]
*/
public static String addMonth(final Date date, final int month) {
DateFormat dateFormat = new SimpleDateFormat(datePattern, Locale.CHINESE);
return dateFormat.format(operateDay(date, month));
}

/**
* 对date,加上month月
*
* @param date
* @param month
* @return Date
* @see [类、类#方法、类#成员]
*/
public static Date operateMonth(final Date date, final int month) {
Calendar c = toCalendar(date);
c.add(Calendar.MONTH, month);
return c.getTime();
}

/**
* 对date,加上year年
*
* @param date
* @param year
* @return String
* @see [类、类#方法、类#成员]
*/
public static String addYear(final Date date, final int year) {
DateFormat dateFormat = new SimpleDateFormat(datePattern, Locale.CHINESE);
return dateFormat.format(operateDay(date, year));
}

/**
* 对date,加上year年
*
* @param date
* @param year
* @return Date
* @see [类、类#方法、类#成员]
*/
public static Date opearteYear(final Date date, final int year) {
Calendar c = toCalendar(date);
c.add(Calendar.YEAR, year);
return c.getTime();
}

/**
* 比较日期 ,得到较大的日期
*/
public Date greatDate(Date date1, Date date2) {
return date1.getTime() > date2.getTime() ? date1 : date2;
}

/**
* 比较日期 ,得到较小的日期
*/
public Date lessDate(Date date1, Date date2) {
return date1.getTime() < date2.getTime() ? date1 : date2;
}

/**
* 当前年
* @return
* @see [类、类#方法、类#成员]
*/
public static int getToYear(){
return getCalendar().get(Calendar.YEAR);
}

/**
* 当前月
* @return
* @see [类、类#方法、类#成员]
*/
public static int getToMonth(){
return (getCalendar().get(Calendar.MONTH)+1);
}

/**
* 当前日(月中日期)
* @return
* @see [类、类#方法、类#成员]
*/
public static int getToDay(){
return getCalendar().get(Calendar.DAY_OF_MONTH);
}


/**
* date的年
* @return
* @see [类、类#方法、类#成员]
*/
public static int getYear(Date date){
return toCalendar(date).get(Calendar.YEAR);
}

/**
* date的月
* @return
* @see [类、类#方法、类#成员]
*/
public static int getMonth(Date date){
return (toCalendar(date).get(Calendar.MONTH)+1);
}

/**
* date的日(月中日期)
* @return
* @see [类、类#方法、类#成员]
*/
public static int getDay(Date date){
return toCalendar(date).get(Calendar.DAY_OF_MONTH);
}

/**
* 根据year,month,day获得Date
* @param year
* @param month
* @param day
* @return
* @see [类、类#方法、类#成员]
*/
public static Date getDate(int year, int month, int day){
Calendar c = new GregorianCalendar(year, (month-1), day);
return c.getTime();
}

/**
* 根据Date获得当天的起始时间,即0时
* @param year
* @param month
* @param day
* @return
* @see [类、类#方法、类#成员]
*/
public static Calendar toBeginOfCalendar(Date date){
Calendar c = toCalendar(date);
int year = c.get(Calendar.YEAR);
int month = c.get(Calendar.MONTH);
int day = c.get(Calendar.DAY_OF_MONTH);
return new GregorianCalendar(year, month, day);
}

/**
* 根据Date获得当天的起始时间,即0时
* @param year
* @param month
* @param day
* @return
* @see [类、类#方法、类#成员]
*/
public static Date toBeginOfDate(Date date){
return (toBeginOfCalendar(date)).getTime();
}

/**
* 得到本月最后一天
* @param date
* @return
* @see [类、类#方法、类#成员]
*/
public static Date getLastDayOfMonth(Date date){
Calendar c = new GregorianCalendar(getYear(date), getMonth(date), 1);
c.add(Calendar.DATE, -1);
return c.getTime();
}

/**
* 将java.util.Date转换为java.sql.Date
* @param date
* @return
* @see [类、类#方法、类#成员]
*/
public static java.sql.Date toSqlDate(Date date){
return new java.sql.Date(date.getTime());
}

/**
* 比较targetDate是不是在beginDate和endDate之间,按天算,也就是yyyy-MM-dd;
* 三个条件必须同时满足:
* 1、beginDate必须小于等于endDate
* 2、targetDate大于等于beginDate
* 3、targetDate小于等于endDate
* @param targetDate
* @param beginDate
* @param endDate
* @return
*/
public static boolean isDayBetween(Date targetDate, Date beginDate, Date endDate){
Calendar targetCalendar = toBeginOfCalendar(targetDate);
Calendar beginCalendar = toBeginOfCalendar(beginDate);
Calendar endCalendar = toBeginOfCalendar(endDate);
//beginDate必须小于等于endDate
boolean isRightRange = beginCalendar.before(endCalendar) || beginCalendar.equals(endCalendar);
//targetDate大于等于beginDate
boolean bigOrEquals = targetCalendar.after(beginCalendar) || targetCalendar.equals(beginCalendar);
//targetDate小于等于endDate
boolean smallOrEquals = targetCalendar.before(endCalendar) || targetCalendar.equals(endCalendar);
//三个条件必须同时满足
return isRightRange&&bigOrEquals&&smallOrEquals;
}

/**
* @param args
*/
public static void main(String[] args) {
/*测试日期间差距*/

Date testDate = parseDate("2001-05-03 23:52:23.32");

System.out.println(testDate);
System.out.println("周" + cnWeekDay(testDate));
System.out.println("test Year:\t" + getYear(testDate));
System.out.println("test Month:\t" + getMonth(testDate));
System.out.println("test Day:\t" + getDay(testDate));

Date toDate = new Date();
System.out.println(toDate);
System.out.println("周" + cnWeekDay(toDate));
System.out.println("To Year:\t" + getToYear());
System.out.println("To Month:\t" + getToMonth());
System.out.println("To Day:\t\t" + getToDay());

System.out.println("getDate():\t" + getDate(2011, 1, 9));
System.out.println("getLastDayOfMonth():\t" + getLastDayOfMonth(getDate(2012, 2, 9)));

System.out.println("diffYears()" + diffYears(getDate(2001, 2, 9),getDate(2011, 1, 21)));

/*测试日期间差距*/
Date d1 = new Date();
System.out.println(getWeekDay(d1));

Date d2 = parseDate("2011-12-29");
System.out.println(toBeginOfDate(d1));
System.out.println(d2);
System.out.println(diffDays(d1, d2));
System.out.println(diffDays(toBeginOfDate(d1), toBeginOfDate(d2)));

/*按天比较*/
Date targetDate = parseDate("2012-02-28 08:52:23.32"),
beginDate = parseDate("2012-02-27 00:00:00.00"),
endDate = parseDate("2012-02-28 00:00:00.00");

System.out.println(isDayBetween(targetDate, beginDate, endDate));
/*
Calendar targetCalendar = toBeginOfCalendar(targetDate);
Calendar beginCalendar = toBeginOfCalendar(beginDate);
Calendar endCalendar = toBeginOfCalendar(endDate);
System.out.println(targetCalendar.after(beginCalendar));
System.out.println(targetCalendar.equals(beginCalendar));

System.out.println(targetCalendar.before(endCalendar));
System.out.println(targetCalendar.equals(endCalendar));
// */


}

}
分享到:
评论

相关推荐

    强大的日期时间工具库-dateTimeUtils

    该工具库涵盖了多个常见的日期时间操作功能,如日期格式化、获取当前时间、获取开始/结束时间、时间戳转换、计算日期差、获取相对时间等。以下是它的主要功能模块: 1. 日期格式化:将日期转换为指定格式的字符串...

    DateTimeUtils.java

    时间处理帮助类

    DateTimeUtils .java

    java8日期,所编写的一个工具类

    Python库 | simpleutils-0.2.5.tar.gz

    同样,对于日期格式化或时间间隔计算,`datetimeutils`中的函数将提供方便的接口,避免了重复编写类似逻辑。 此外,一个成熟的Python库还会考虑到错误处理和兼容性问题。simpleutils可能会提供异常处理机制,确保在...

    Python库 | pyats.utils-21.5-cp36-cp36m-manylinux1_x86_64.whl

    - **时间和日期处理**: `pyats.utils.datetimeutils`提供日期和时间的处理,例如格式转换、时间间隔计算等,有助于在测试中处理时间相关的逻辑。 ### 2. 兼容性和环境要求 `pyats.utils-21.5-cp36-cp36m-manylinux...

    C# 通用实体类总结,比较全

    例如,`DateTimeUtils`可能包含以下方法: ```csharp public static class DateTimeUtils { public static DateTime ConvertToUtc(DateTime localDateTime) { // 实现将本地时间转换为UTC时间的逻辑 } ...

    爱谱官网项目,有工具类值得一用

    工具类可能会包含`DateTimeUtils`,提供格式化、解析、比较日期等便捷方法,如获取当前时间、计算两个日期之间的差值等。 2. **字符串操作**:`StringUtils`类可能包含对字符串的各种操作,如空判断、拼接、替换、...

    commons-lang-2.2.zip

    5. **日期和时间操作**:`DateUtils`和`DateTimeUtils`提供了日期和时间的处理,包括格式化、解析、比较等。 6. **反射操作**:`ClassUtils`提供了关于类和接口的元数据操作,以及类加载和反射相关的工具。 7. **...

    commons-lang3-3.8-bin.zip

    4. **日期和时间**:`DateUtils` 和 `DateTimeUtils` 提供了日期和时间的处理函数,包括格式化、解析和比较。此外,`DurationFormatUtils` 可以帮助格式化时间间隔。 5. **枚举处理**:`EnumUtils` 类提供了与枚举...

    Java8新的时间日期库的20个使用示例Java开发Jav

    19. **DateTimeUtils**: 提供与旧版`java.util.Date`和`Calendar`转换的工具方法。 20. **TemporalField**: 代表日期时间字段,如`ChronoField.DAY_OF_MONTH`。 通过以上示例,我们可以看到Java 8时间日期库提供了...

    C#-帮助类基类大全,涵盖大部分日常使用

    2. **日期时间操作**:开发者可能会创建一个`DateTimeUtils`类,提供获取当前时间、比较日期、格式化日期、解析日期字符串等方法。例如,`GetNow()`返回当前日期时间,`AddDays()`可以增加或减少指定天数。 3. **...

    JavaWeb相关的工具类、Java资源

    - **日期时间处理**:如DateTimeUtils,用于格式化、解析日期和时间,处理时区转换等,对处理时间相关的业务逻辑至关重要。 - **集合操作**:如CollectionUtils,提供对List、Set、Map等集合的扩展功能,如查找、...

    开发中用到的常用到的类

    除了Util和Config类,这个压缩包可能还包含了其他一些常见的开发类,比如IO操作的`FileUtils`,网络通信的`HttpClientUtils`,日期时间处理的`DateTimeUtils`,集合操作的`CollectionUtils`等。这些类通常遵循单一...

    commons-lang3-3.7

    2. **日期/时间**:`DateUtils`和`DateTimeUtils`提供了日期和时间的操作,如格式化、解析和计算日期差。 3. **异常处理**:`ExceptionUtils`可以帮助捕获、堆栈跟踪和处理异常,简化异常处理代码。 4. **JVM交互**...

    AutoZipFiles.rar

    3. `DateTimeUtils.cs`:可能包含用于处理日期和时间逻辑的辅助方法。 4. `Settings.config`:存储用户配置,比如SFTP服务器信息、登录凭据和自定义日期设置。 5. `log.txt`或类似文件:日志记录,用于调试和追踪...

    clock library

    3. `DateTimeUtils` 类:提供日期时间相关的辅助函数,如`AddDays(int days)`增加指定天数,`CompareDates(DateTime date1, DateTime date2)`比较两个日期。 此外,该库可能还提供了线程安全的接口,确保在多线程...

    delphi日期源代码

    2. 使用DateTimeUtils单元:提供了一些高级的日期和时间操作,比如IsToday、DaysBetween等。 3. 创建自定义日期类:为了满足特定需求,开发者有时会创建自定义的日期类,扩展TDateTime的功能,例如添加额外的属性或...

    commons-lang3-3.12.0.jar

    `DateUtils`和`DateTimeUtils`提供了对Java `java.util.Date`和`java.time`包的增强功能,包括日期的格式化、解析、比较和计算。例如,`parseDate()`可以将字符串转换为日期,`addDays()`可以向日期添加指定天数,而...

    一些java常用的工具类

    例如,可能会有一个DateTimeUtils类,提供日期和时间的格式化、比较和转换方法;一个FileUtils类,用于文件的读写、复制和删除操作;或者一个StringUtils类,包含对字符串的各种操作,如拼接、分割、替换等。 在...

Global site tag (gtag.js) - Google Analytics