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. Facenet Triplet Loss

    Triplet Loss 在人脸识别中,Triplet loss被用来进行人脸嵌入的训练.如果你对triplet loss很陌生,可以看一下吴恩达关于这一块的课程.Triplet loss实现起来并不 ...

  2. 主角场景Shader效果:遮挡透明

    基本原理:被遮挡的部分关闭深度写入, 显示透明效果:未被遮挡的部分不关闭深度测试,显示正常贴图效果,即使用两个Pass即可. Pass1:关闭深度写入(ZWrite Off),深度测试渲染较远的物体, ...

  3. 特征选择实践---python

    作者:城东链接:https://www.zhihu.com/question/28641663/answer/110165221来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明 ...

  4. HDU 3271 数位dp+二分

    SNIBB Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submi ...

  5. Object-C使用类静态方法创建对象时容易内存泄露

    1.所谓使用类的静态方法创建对象,就是指使用类名调用一次它的静态方法(非显式调用alloc)便可以得到一个新建的对象,比如下面两个例子: NSString* str1 = [NSString stri ...

  6. JS中的异步与回调

    问题的引出:在js中使用异步调用时,有可能会出现在异步的回调函数中设置调用之外的变量值,但在异步调用完成后去使用变量,却发现这些变量值并没有被成功设置的情况.如: google map中的地理编码,地 ...

  7. linux之top命令详解

    top:动态查看进程变化,监控linux的系统状况. top命令是Linux下常用的性能分析工具,能够实时显示系统中各个进程的资源占用状况,类似于Windows的任务管理器. 下面详细介绍它的使用方法 ...

  8. SDOI2017 Round1 起点

    第二次打酱油了 高一两次考试以打两瓶酱油告终 来的时候明知自己没戏,却总存有一丝希望 NOIP连200都没考到,是不是有点儿不自量力 如果我真的去争取那一丝希望的话,该有多好 先简单分析下考试 Day ...

  9. ECMAScript6语法检查规范错误信息说明

    项目中使用ECMAScript6的时候经查会使用语法检查,下面是常见错误信息的汇总: “Missing semicolon.” : “缺少分号.”, “Use the function form of ...

  10. Spyder之Object Inspector组件

    Spyder之Object Inspector组件 最新版的Spyder已经把它修改为Help组件了. Quick access to documentation is a must for ever ...