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. 关于未来IT职业教育的思考

    回首过去20年的IT教育,从基本的办公软件(应用软件)到基础设施培训(网络.ps.3d等)再到软件开发(java等),可以说是见证了中国计算机发展的整个阶段,随着时代的变迁,计算机从最初的普及阶段到深 ...

  2. Android ListView 几个重要属性

    Android ListView 几个重要属性http://blog.csdn.net/avenleft/article/details/7334060 android:transcriptMode= ...

  3. 解题:POI 2009 Fire Extinguishers

    题面 洛谷数据非常水,建议去bzoj 我第一眼一看这不是那个POI2011的升级版吗(明明这个是2009年的,应该说那个是这个的弱化版,果然思想差不多. 因为$k$很小,可以考虑每个间隔距离来转移.我 ...

  4. 解决Anaconda4.2 Navigator打不开的问题

    参照博客:http://blog.csdn.net/k3v1n1990s/article/details/72975528?utm_source=itdadao&utm_medium=refe ...

  5. mysql快速导入5000万条数据过程记录(LOAD DATA INFILE方式)

    mysql快速导入5000万条数据过程记录(LOAD DATA INFILE方式) 首先将要导入的数据文件top5000W.txt放入到数据库数据目录/var/local/mysql/data/${d ...

  6. ubuntu内核及系统升级

    升级之前,需要先确认ubuntu当前系统版本,使用操作: root@Dy-JXQ-ubuntu-101:~# lsb_release -a No LSB modules are available. ...

  7. C++函数不能为virtual的场景

    1.类函数不能同时被static和virtual修饰. 2.类的模板函数不能被virtual修饰 未完待续

  8. Shell记录-Shell命令(find)

    Linux中的find命令在目录结构中搜索文件,并执行指定的操作.Linux下find命令提供了相当多的查找条件,功能很强大.由于find具有强大的功能,所以它的选项也很多,其中大部分选项都值得我们花 ...

  9. HTTP 错误 500.19 请求的页面的相关配置数据无效 解决办法

    "HTTP 错误 500.19 请求的页面的相关配置数据无效" 解决办法   HTTP 错误 500.19 - Internal Server Error无法访问请求的页面,因为该 ...

  10. bzoj千题计划160:bzoj2599: [IOI2011]Race

    http://www.lydsy.com/JudgeOnline/problem.php?id=2599 点分治 mi[i] 记录边权和为i时的最少边数 先更新答案,再更新mi数组,换根时清空mi # ...