package com.ctid.rachel.core.util;

import java.math.BigDecimal;
import java.util.Calendar;
import java.util.Date;

import org.springframework.stereotype.Component;

/**
* 日期及时间处理工具类
* @author 肖复禹
* @date 2015-9-16
* @email xiaofuyu@ctid.com.cn
*/
@Component(value="dateHandler")
public class DateHandler {

/**
* 获取当前时间点后的第N天的日期
* @param day 日期增量
* @return 新的日期对象
*/
public static Date GetAfterDay(int day) {
Calendar cal = Calendar.getInstance();
cal.add(Calendar.DAY_OF_MONTH, day);
return cal.getTime();
}

/**
* 获取目标日期后N天的日期
* @param date 目标日期
* @param day 日期增量
* @return 新的日期对象
*/
public static Date GetAfterDay(Date date, int day) {
Calendar cal = Calendar.getInstance();
cal.setTime(date);
cal.add(Calendar.DAY_OF_MONTH, day);
return cal.getTime();
}

/**
* 获取当前时间后N个月的时间
* @param month 月份增量
* @return 新的日期对象
*/
public static Date GetAfterMonth(int month) {
Calendar cal = Calendar.getInstance();
cal.add(Calendar.MONTH, month);
return cal.getTime();
}

/**
* 获取目标时间后N个月的日期
* @param date 目标时间
* @param month 月份增量
* @return 新的日期对象
*/
public static Date GetAfterMonth(Date date, int month) {
Calendar cal = Calendar.getInstance();
cal.setTime(date);
cal.add(Calendar.MONTH, month);
return cal.getTime();
}

/**
* 获取当前日期后N年的日期
* @param year 年份增量
* @return 新的日期对象
*/
public static Date GetAfterYear(int year) {
Calendar cal = Calendar.getInstance();
cal.add(Calendar.YEAR, year);
return cal.getTime();
}

/**
* 获取指定日期后N年的日期
* @param date 目标日期
* @param year 年份增量
* @return 新的日期对象
*/
public static Date GetAfterYear(Date date, int year) {
Calendar cal = Calendar.getInstance();
cal.setTime(date);
cal.add(Calendar.YEAR, year);
return cal.getTime();
}

/**
* 获取当前时间后N分钟的时间
* @param minute 分钟增量
* @return 新的日期对象
*/
public static Date GetAfterMinute(int minute) {
Calendar cal = Calendar.getInstance();
cal.add(Calendar.MINUTE, minute);
return cal.getTime();
}

/**
* 获取目标时间后N分钟的时间
* @param date 目标时间
* @param second 分钟增量
* @return 新的日期对象
*/
public static Date GetAfterMinute(Date date, int minute) {
Calendar cal = Calendar.getInstance();
cal.setTime(date);
cal.add(Calendar.MINUTE, minute);
return cal.getTime();
}

/**
* 获取当前时间后N秒的时间
* @param second 秒增量
* @return 新的日期对象
*/
public static Date GetAfterSecond(int second) {
Calendar cal = Calendar.getInstance();
cal.add(Calendar.SECOND, second);
return cal.getTime();
}

/**
* 获取目标时间后N秒的时间
* @param date 目标时间
* @param second 秒增量
* @return 新的日期对象
*/
public static Date GetAfterSecond(Date date, int second) {
Calendar cal = Calendar.getInstance();
cal.setTime(date);
cal.add(Calendar.SECOND, second);
return cal.getTime();
}

/**
* 获取目标时间的年份
* @param date 目标时间
* @return 目标时间的年份
*/
public static int GetDateYear(Date date) {
Calendar cal = Calendar.getInstance();
cal.setTime(date);
return cal.get(Calendar.YEAR);
}

/**
* 获取目标时间的月份
* @param date 目标时间的月份
* @return 目标时间的月份
*/
public static int GetDateMonth(Date date) {
Calendar cal = Calendar.getInstance();
cal.setTime(date);
return cal.get(Calendar.MONTH) + 1;
}

/**
* 获取目标时间的日期
* @param date 目标时间
* @return 目标时间的日期
*/
public static int GetDateDay(Date date) {
Calendar cal = Calendar.getInstance();
cal.setTime(date);
return cal.get(Calendar.DAY_OF_MONTH);
}

/**
* 获取指定日期是星期几
* @param date 目标日期
* @return 指定日期为星期几
*/
public static String GetDateDayOfWeek(Date date) {
Calendar cal = Calendar.getInstance();
cal.setTime(date);
int dayOfWeek = cal.get(Calendar.DAY_OF_WEEK);

switch(dayOfWeek) {
case 1:
return "星期日";
case 2:
return "星期一";
case 3:
return "星期二";
case 4:
return "星期三";
case 5:
return "星期四";
case 6:
return "星期五";
case 7:
return "星期六";
default:
return "";
}
}

/**
* 通过年、月、日创建新的时间对象
* @param year 年
* @param month 月
* @param day 日
* @return 新的时间对象
*/
public static Date GetDate(int year, int month, int day) {
Calendar cal = Calendar.getInstance();
cal.set(year, month - 1, day, 0, 0, 0);
return cal.getTime();
}

/**
* 通过年、月、日、时、分、秒创建新的时间对象
* @param year 年
* @param month 月
* @param day 日
* @param hour 时
* @param minute 分
* @param second 秒
* @return 新的时间对象
*/
public static Date GetDate(int year, int month, int day, int hour, int minute, int second) {
Calendar cal = Calendar.getInstance();
cal.set(year, month - 1, day, hour, minute, second);
return cal.getTime();
}

/**
* 获取两个时间之间的相差的天数
* @param start 起始时间
* @param end 截止时间
* @return 相差的天数
*/
public static int GetDateDiff(Date start, Date end) {
long ts = end.getTime() - start.getTime();
return (int)(ts / (24 * 60 * 60 * 1000)) ;
}

/**
* 获取两个时间之间相差的秒数
* @param start 起始时间
* @param end 截止时间
* @return 相差的秒数
*/
public static int GetDateDiffSecond(Date start, Date end) {
long ts = end.getTime() - start.getTime();
double seconds = ((double)ts / 1000);
BigDecimal b = new BigDecimal(seconds);
double d1 = b.setScale(0, BigDecimal.ROUND_HALF_UP).doubleValue();
return (int)d1;
}

}

工具类DateHandler的更多相关文章

  1. DateHandler日期处理工具(JSP中使用后台工具类)

    1.DateHandler.java package Utils.dateHandler; import java.text.ParseException; import java.text.Simp ...

  2. Java基础Map接口+Collections工具类

    1.Map中我们主要讲两个接口 HashMap  与   LinkedHashMap (1)其中LinkedHashMap是有序的  怎么存怎么取出来 我们讲一下Map的增删改查功能: /* * Ma ...

  3. Android—关于自定义对话框的工具类

    开发中有很多地方会用到自定义对话框,为了避免不必要的城府代码,在此总结出一个工具类. 弹出对话框的地方很多,但是都大同小异,不同无非就是提示内容或者图片不同,下面这个类是将提示内容和图片放到了自定义函 ...

  4. [转]Java常用工具类集合

    转自:http://blog.csdn.net/justdb/article/details/8653166 数据库连接工具类——仅仅获得连接对象 ConnDB.java package com.ut ...

  5. js常用工具类.

    一些js的工具类 复制代码 /** * Created by sevennight on 15-1-31. * js常用工具类 */ /** * 方法作用:[格式化时间] * 使用方法 * 示例: * ...

  6. Guava库介绍之实用工具类

    作者:Jack47 转载请保留作者和原文出处 欢迎关注我的微信公众账号程序员杰克,两边的文章会同步,也可以添加我的RSS订阅源. 本文是我写的Google开源的Java编程库Guava系列之一,主要介 ...

  7. Java程序员的日常—— Arrays工具类的使用

    这个类在日常的开发中,还是非常常用的.今天就总结一下Arrays工具类的常用方法.最常用的就是asList,sort,toStream,equals,copyOf了.另外可以深入学习下Arrays的排 ...

  8. .net使用正则表达式校验、匹配字符工具类

    开发程序离不开数据的校验,这里整理了一些数据的校验.匹配的方法: /// <summary> /// 字符(串)验证.匹配工具类 /// </summary> public c ...

  9. WebUtils-网络请求工具类

    网络请求工具类,大幅代码借鉴aplipay. using System; using System.Collections.Generic; using System.IO; using System ...

随机推荐

  1. 2016-2017 National Taiwan University World Final Team Selection Contest (Codeforces Gym) 部分题解

      D 考虑每个点被删除时其他点对它的贡献,然后发现要求出距离为1~k的点对有多少个. 树分治+FFT.分治时把所有点放一起做一遍FFT,然后减去把每棵子树单独做FFT求出来的值. 复杂度$nlog^ ...

  2. [BZOJ1878][SDOI2009] HH的项链 (树状数组)

    link 一道简单题. 不用可持久化. 对于统计颜色个数,可以看与其颜色一样的前一个位置. 设$las(i)$表示其与$i$颜色相等的上一个位置. 则对于二元组$(l,r)$,其答案为$\sum_{i ...

  3. Lnmp上安装Yaf学习(二)

    上一节主要实践了在Lnmp上安装Yaf扩展,那么这一节将测试 Yaf 的一个简单demo的运行. 一.通过Lnmp 创建 vhost 文件 [root@localhost yaf-3.0.6]# ln ...

  4. D. Huge Strings Codeforces Round #438 by Sberbank and Barcelona Bootcamp (Div. 1 + Div. 2 combined)

    http://codeforces.com/contest/868/problem/D 优化:两个串合并 原有状态+ 第一个串的尾部&第二个串的头部的状态 串变为第一个串的头部&第二个 ...

  5. git "refusing to merge unrelated histories" 解决方法

    出现这个错误是因为本地的 git 历史和远程仓库的 git 历史不一样,如果我们想要合并两个不同的 git 历史(我们必须要清楚我们在做什么),就可以使用这个选项来进行强制合并不同的 git 历史,如 ...

  6. [python]python安装包错误

    “UnicodeDecodeError: ‘ascii’ codec can’t decode : ordinal not )” 在windows XP上 解决方法: Solution: ====== ...

  7. 【转载】14个你可能不知道的 JavaScript 调试技巧

    了解你的工具可以极大的帮助你完成任务.尽管 JavaScript 的调试非常麻烦,但在掌握了技巧 (tricks) 的情况下,你依然可以用尽量少的的时间解决这些错误 (errors) 和问题 (bug ...

  8. UIKit类图

  9. 介绍——基于类的视图(class-based view)

    ​刚开始的时候,django只有基于函数的视图(Function-based views).为了解决开发视图中繁杂的重复代码,基于函数的通用视图( Class-based generic views) ...

  10. python安装包提示error: option --single-version-externally-managed not recognized

    pip install mysql-connector-python-rf==2.2.2 安装包的时候提示错误信息:error:option--single-version-externally-ma ...