0

0

服务端日期处理的类

巴扎黑

巴扎黑

发布时间:2016-12-10 09:36:04

|

1058人浏览过

|

来源于php中文网

原创

 package com.gbcom.system.utils;
import java.sql.Timestamp;
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 javax.xml.datatype.DatatypeConfigurationException;
import javax.xml.datatype.DatatypeFactory;
import javax.xml.datatype.XMLGregorianCalendar;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.gbcom.op.util.Assert;
import com.hc.core.utils.XMLGregorianCalendarConversionUtils;
/**
 * 服务端日期处理的类
 * 
 */
public class DateUtil {
/**
* 日志记录器
*/
public static final Logger LOG = LoggerFactory.getLogger(DateUtil.class);
/**
* 给指定的日期增加指定的时间
* 
* @param date
*            日期
* @param field
*            如#Calendar.MONTH #Calendar.DAY
* @param amount
*            数目,如1 加一天 -1减一天
* @return 增加指定时间的日期
*/
public static Date add(Date date, int field, int amount) {
Calendar calendar = getCalendar(date);
calendar.add(field, amount);
return calendar.getTime();
}
/**
* 将传入的日期转换成今天的时间
* 
* @param date
*            传入的日期
* @return 返回今天的时间
*/
public static Date getTodayTime(Date date) {
Calendar cNow = getCalendar(new Date());
Calendar calendar = getCalendar(date);
calendar.set(Calendar.YEAR, cNow.get(Calendar.YEAR));
calendar.set(Calendar.MONTH, cNow.get(Calendar.MONTH));
calendar.set(Calendar.DAY_OF_YEAR, cNow.get(Calendar.DAY_OF_YEAR));
return calendar.getTime();
}
/**
* 返回指定日期是一周中的第几天
* 
* @param date
*            指定日期
* @return 返回指定日期是一周中的第几天
*/
public static int getWeek(Date date) {
Calendar calendar = getCalendar(date);
return calendar.get(Calendar.DAY_OF_WEEK);
}
/**
* Date转换成Calendar
* 
* @param date
*            Date
* @return Calendar
*/
public static Calendar getCalendar(Date date) {
if (date == null) {
return null;
}
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
return calendar;
}
/**
* 两个日期相减,date1-date2,取得相差几天
* 
* @param date1
*            日期1
* @param date2
*            日期2
* @return 取得相差几天
*/
public static int sub(Date date1, Date date2) {
Assert.notNull(date1);
Assert.notNull(date2);
long tem = date1.getTime() - date2.getTime();
return Integer.parseInt(String.valueOf(tem / (24 * 60 * 60 * 1000)));
}
/**
* 合并时间,
* 
* @param date
*            年月日
* @param time
*            时分秒
* @return 合并后的日期
*/
@SuppressWarnings("deprecation")
public static Date mergeDate(Date date, Date time) {
Calendar calendar = getCalendar(date);
calendar.set(Calendar.MINUTE, time.getMinutes());
calendar.set(Calendar.HOUR_OF_DAY, time.getHours());
return calendar.getTime();
}
/**
* 用默认风格把时间格式化成yyyy-MM-dd HH:mm:ss 的时间字符串
* 
* @author zhaishixi 2013-09-18
* @param date
*            时间字符串
* @return date
*/
public static String format(Object date) {
if (date != null) {
return DateFormat.getDateTimeInstance().format(date);
} else {
return null;
}
}
/**
* 用默认风格把时间格式化成制定格式如( yyyy-MM-dd HH:mm:ss) 的时间字符串
* 
* @author zhaishixi 2013-09-26
* @param date
*            时间字符串
* @param pattern
*            the pattern describing the date and time format
* @return date
*/
public static String format(Object date, String pattern) {
SimpleDateFormat sdf = new SimpleDateFormat(pattern);
if (date != null) {
return sdf.format(date);
} else {
return null;
}
}
/**
* 用默认风格把date(Object 类型)按指定格式pattern格式化Date类型
* 
* @author zhaishixi 2013-09-26
* @param date
*            时间字符串 * @param pattern the pattern describing the date and
*            time format
* @return date
*/
public static Date parse(Object date, String pattern) {
Date fd = new Date();
if (date == null) {
return null;
}
SimpleDateFormat sdf = new SimpleDateFormat(pattern);
try {
fd = sdf.parse(date.toString());
} catch (ParseException e) {
LOG.error("parse date failed!", e);
}
return fd;
}
/**
* 用默认风格把date(Object 类型)按指定格式pattern格式化Date类型
* 
* @param date
*            要转换的日期
* @param pattern
*            格式
* @return 转换后的日期
*/
public static Date parseDate(Object date, String pattern) {
Date d = new Date();
if (date == null) {
return null;
}
SimpleDateFormat sdf = new SimpleDateFormat(pattern);
String format = sdf.format(date);
try {
d = sdf.parse(format);
} catch (ParseException e) {
e.printStackTrace();
}
return d;
}
/**
* 计算出离beginDate日期data天的日期. 
  • 若datas小于0表示当前日期之前data天.
  • * 若datas大于0表当前日期之后data天. * * @author zhaishixi 2013-09-25 * @param beginDate * 要计算的天数 * @param data * 间隔 * @return 得到日期 格式:yyyy-MM-dd HH:mm:ss */ public static Date getDate(Date beginDate, int data) { Calendar beginCal = Calendar.getInstance(); beginCal.setTimeInMillis(beginDate.getTime()); GregorianCalendar calendar = new GregorianCalendar(beginCal .get(Calendar.YEAR), beginCal.get(Calendar.MONTH), beginCal .get(Calendar.DATE), beginCal.get(Calendar.HOUR_OF_DAY), beginCal.get(Calendar.MINUTE), beginCal.get(Calendar.SECOND)); calendar.add(GregorianCalendar.DATE, data); return new Date(calendar.getTimeInMillis()); } /** * 将时间(单位为秒) 转化为 :时 :分 : 秒格式 * * 该time 并非 {@link Date#getTime()} ,单位为秒 * * @param time * long * @return String */ public static String valueOfSecond(long time) { long h = time / 3600; long m = (time % 3600) / 60; long s = (time % 3600) % 60; String value = h + "Basic_hour" + ":" + m + "Basic_min" + ":" + s + "Basic_sec"; return value; } /** * 将时间(单位为分钟) 转化为 :天:时 :分格式 * * 该time 并非 {@link Date#getTime()} ,单位为分钟 * * @param time * long * @return String */ public static String valueOfMinute(long time) { long d = time / (24 * 60); long h = (time % (24 * 60)) / 60; long m = (time % (24 * 60)) % 60; String value = d + "Basic_day" + ":" + h + "Basic_hour" + ":" + m + "Basic_min"; return value; } /** * 返回当前月前n个月或者后n个月的第一天 * * @param num * n个月 isPositive 为true表示前,为false表示后 * @param isPositive * +/- * @return n个月第一天 */ @SuppressWarnings("deprecation") public static Date getFirstDayOfMonth(int num, boolean isPositive) { Date date = new Date(); Calendar calendar = Calendar.getInstance(); int year = calendar.getTime().getYear(); int month = calendar.getTime().getMonth(); if (isPositive) { month = month + num; } else { month = month - num; } int day = 1; if (month < 0) { year = year - 1; month = 11; } else if (month > 12) { year = year + 1; month = 0; } date = new Date(year, month, day); return date; } // ----------------非通用方法,谨慎使用----------------// /** * 时间格式转换--cxf不识别java.sql.Timestamp * * @param orgTime * java.sql.Timestamp * @return XMLGregorianCalendar */ public static XMLGregorianCalendar timeToXmlDate(java.sql.Timestamp orgTime) { if (orgTime != null) { return XMLGregorianCalendarConversionUtils .asXMLGregorianCalendar(new Date(orgTime.getTime())); } return null; } /** * 将xmldate转为timestamp * * @param cal * XMLGregorianCalendar * @return java.sql.Timestamp */ public static java.sql.Timestamp xmlDate2Time(XMLGregorianCalendar cal) { if (cal != null) { return new java.sql.Timestamp(XMLGregorianCalendarConversionUtils .asDate(cal).getTime()); } return null; } /** * 将Date类转换为XMLGregorianCalendar * * @param date * Date * @return XMLGregorianCalendar */ public static XMLGregorianCalendar dateToXmlDate(Date date) { Calendar cal = Calendar.getInstance(); cal.setTime(date); DatatypeFactory dtf = null; try { dtf = DatatypeFactory.newInstance(); } catch (DatatypeConfigurationException e) { } XMLGregorianCalendar dateType = dtf.newXMLGregorianCalendar(); dateType.setYear(cal.get(Calendar.YEAR)); // 由于Calendar.MONTH取值范围为0~11,需要加1 dateType.setMonth(cal.get(Calendar.MONTH) + 1); dateType.setDay(cal.get(Calendar.DAY_OF_MONTH)); dateType.setHour(cal.get(Calendar.HOUR_OF_DAY)); dateType.setMinute(cal.get(Calendar.MINUTE)); dateType.setSecond(cal.get(Calendar.SECOND)); return dateType; } /** * 将XMLGregorianCalendar转换为Date * * @param cal * XMLGregorianCalendar * @return Date */ public static Date xmlDate2Date(XMLGregorianCalendar cal) { return cal.toGregorianCalendar().getTime(); } /** * 获取工作时间:8:30 - 17:30 * * @param date * String * @return String[] * @throws ParseException * ParseException */ public static String[] getWorkDate(String date) throws ParseException { SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd"); Calendar cd = Calendar.getInstance(); cd.setTime(simpleDateFormat.parse(date)); cd.add(Calendar.HOUR, 7); cd.add(Calendar.MINUTE, 30); simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm"); String[] workDate = new String[2]; workDate[0] = simpleDateFormat.format(cd.getTime()); cd.add(Calendar.HOUR, 10); workDate[1] = simpleDateFormat.format(cd.getTime()); return workDate; } /** * 获取当天的开始时间 * * @param date * 指定日期 * @return 当前开始日期 */ public static Date getCurDayStart(Date date) { Calendar calendar = Calendar.getInstance(); calendar.setTime(date); calendar.set(Calendar.HOUR_OF_DAY, 0); calendar.set(Calendar.MINUTE, 0); calendar.set(Calendar.SECOND, 0); return calendar.getTime(); } /** * 获取本周的开始时间 * * @param date * 指定日期 * @return 本周开始日期 */ public static Date getCurWeekStart(Date date) { Calendar calendar = Calendar.getInstance(); calendar.setTime(date); calendar.setFirstDayOfWeek(Calendar.MONDAY); calendar.set(Calendar.HOUR_OF_DAY, 0); calendar.set(Calendar.MINUTE, 0); calendar.set(Calendar.SECOND, 0); calendar.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY); return calendar.getTime(); } /** * 获取当月的开始时间 * * @param date * 指定日期 * @return 当月开始日期 */ public static Date getCurMonthStart(Date date) { Calendar calendar = Calendar.getInstance(); calendar.setTime(date); calendar.set(Calendar.DAY_OF_MONTH, 1); calendar.set(Calendar.HOUR_OF_DAY, 0); calendar.set(Calendar.MINUTE, 0); calendar.set(Calendar.SECOND, 0); return calendar.getTime(); } /** * 获取当年的开始日期 * * @param date * 指定日期 * @return 当年的开始日期 */ public static Date getCurYearStart(Date date) { Calendar calendar = Calendar.getInstance(); calendar.setTime(date); calendar.set(Calendar.DAY_OF_YEAR, 1); calendar.set(Calendar.HOUR_OF_DAY, 0); calendar.set(Calendar.MINUTE, 0); calendar.set(Calendar.SECOND, 0); return calendar.getTime(); } public static Date longToDate(long lg){ //long ,转 date return new Date(lg); } public static long DateToLong(Date date){ return date.getTime(); } /** * date对象指向的实体却是一个Timestamp,即date拥有Date类的方法,但被覆盖的方法的执行实体在Timestamp中。 * : (DateUtil.tsToDate) * @param ts * @return */ public static Date tsToDate(Timestamp ts){ Date date = new Date(); try { date = ts; } catch (Exception e) { e.printStackTrace(); } return date; } public static Timestamp DateToTs(Date date){ Timestamp ts = new Timestamp(date.getTime()); return ts; } // off checkstyle public static void main(String[] args) { System.out.println(new Date()); System.out.println(new Date(System.currentTimeMillis())); System.out.println(System.currentTimeMillis()); System.out.println(new Date(System.currentTimeMillis()).getTime()); System.out.println(new Date(System.currentTimeMillis()).getTime()); // // // System.out.println(format(parse("20131111235959","yyyyMMddHHmmss"))); // // // LOG.info("DATA="+parse("TTT20131111235959","dsdsdsd")); // long var = 10201; // System.out.println(valueOfMinute(var)); // System.out.println(valueOfSecond(var)); // // // // Timestamp curTime = new Timestamp(System.currentTimeMillis()); // XMLGregorianCalendar calendar = timeToXmlDate(curTime); // // System.out.println("calendar = " + calendar); // // Timestamp timestamp = xmlDate2Time(calendar); // System.out.println("timestamp = " + // DateTimeHelper.formatTimeGBK(timestamp)); DateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); String time = df.format(getCurWeekStart(new Date())); System.out.println(time); } }
  • 热门AI工具

    更多
    DeepSeek
    DeepSeek

    幻方量化公司旗下的开源大模型平台

    豆包大模型
    豆包大模型

    字节跳动自主研发的一系列大型语言模型

    通义千问
    通义千问

    阿里巴巴推出的全能AI助手

    腾讯元宝
    腾讯元宝

    腾讯混元平台推出的AI助手

    文心一言
    文心一言

    文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

    讯飞写作
    讯飞写作

    基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

    即梦AI
    即梦AI

    一站式AI创作平台,免费AI图片和视频生成。

    ChatGPT
    ChatGPT

    最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

    相关专题

    更多
    java入门学习合集
    java入门学习合集

    本专题整合了java入门学习指南、初学者项目实战、入门到精通等等内容,阅读专题下面的文章了解更多详细学习方法。

    2

    2026.01.29

    java配置环境变量教程合集
    java配置环境变量教程合集

    本专题整合了java配置环境变量设置、步骤、安装jdk、避免冲突等等相关内容,阅读专题下面的文章了解更多详细操作。

    2

    2026.01.29

    java成品学习网站推荐大全
    java成品学习网站推荐大全

    本专题整合了java成品网站、在线成品网站源码、源码入口等等相关内容,阅读专题下面的文章了解更多详细推荐内容。

    0

    2026.01.29

    Java字符串处理使用教程合集
    Java字符串处理使用教程合集

    本专题整合了Java字符串截取、处理、使用、实战等等教程内容,阅读专题下面的文章了解详细操作教程。

    0

    2026.01.29

    Java空对象相关教程合集
    Java空对象相关教程合集

    本专题整合了Java空对象相关教程,阅读专题下面的文章了解更多详细内容。

    3

    2026.01.29

    clawdbot ai使用教程 保姆级clawdbot部署安装手册
    clawdbot ai使用教程 保姆级clawdbot部署安装手册

    Clawdbot是一个“有灵魂”的AI助手,可以帮用户清空收件箱、发送电子邮件、管理日历、办理航班值机等等,并且可以接入用户常用的任何聊天APP,所有的操作均可通过WhatsApp、Telegram等平台完成,用户只需通过对话,就能操控设备自动执行各类任务。

    25

    2026.01.29

    clawdbot龙虾机器人官网入口 clawdbot ai官方网站地址
    clawdbot龙虾机器人官网入口 clawdbot ai官方网站地址

    clawdbot龙虾机器人官网入口:https://clawd.bot/,clawdbot ai是一个“有灵魂”的AI助手,可以帮用户清空收件箱、发送电子邮件、管理日历、办理航班值机等等,并且可以接入用户常用的任何聊天APP,所有的操作均可通过WhatsApp、Telegram等平台完成,用户只需通过对话,就能操控设备自动执行各类任务。

    16

    2026.01.29

    Golang 网络安全与加密实战
    Golang 网络安全与加密实战

    本专题系统讲解 Golang 在网络安全与加密技术中的应用,包括对称加密与非对称加密(AES、RSA)、哈希与数字签名、JWT身份认证、SSL/TLS 安全通信、常见网络攻击防范(如SQL注入、XSS、CSRF)及其防护措施。通过实战案例,帮助学习者掌握 如何使用 Go 语言保障网络通信的安全性,保护用户数据与隐私。

    8

    2026.01.29

    俄罗斯Yandex引擎入口
    俄罗斯Yandex引擎入口

    2026年俄罗斯Yandex搜索引擎最新入口汇总,涵盖免登录、多语言支持、无广告视频播放及本地化服务等核心功能。阅读专题下面的文章了解更多详细内容。

    622

    2026.01.28

    热门下载

    更多
    网站特效
    /
    网站源码
    /
    网站素材
    /
    前端模板

    精品课程

    更多
    相关推荐
    /
    热门推荐
    /
    最新课程
    Kotlin 教程
    Kotlin 教程

    共23课时 | 3万人学习

    C# 教程
    C# 教程

    共94课时 | 7.9万人学习

    Java 教程
    Java 教程

    共578课时 | 53.2万人学习

    关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
    php中文网:公益在线php培训,帮助PHP学习者快速成长!
    关注服务号 技术交流群
    PHP中文网订阅号
    每天精选资源文章推送

    Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号