DateUtils - 时间工具类
import java.text.ParseException;
import java.text.ParsePosition;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.TimeZone;
import java.util.regex.Pattern;public class DateUtils {// 格式:年-月-日 小时:分钟:秒public static final String FORMAT_ONE = "yyyy-MM-dd HH:mm:ss";//到毫秒public static final String FORMAT_SSS = "yyyy-MM-dd HH:mm:ss:SSS";// 格式:年-月-日 小时:分钟public static final String FORMAT_TWO = "yyyy-MM-dd HH:mm";// 格式:年月日 小时分钟秒public static final String FORMAT_THREE = "yyyyMMdd-HHmmss";// 格式:年-月-日 小时:分钟:秒public static final String FORMAT_FOUR = "yyyyMMddHHmmss";// 格式:年-月-日public static final String LONG_DATE_FORMAT = "yyyy-MM-dd";// 格式:月-日public static final String SHORT_DATE_FORMAT = "MM-dd";// 格式:小时:分钟:秒public static final String LONG_TIME_FORMAT = "HH:mm:ss";//格式:年-月public static final String MONTG_DATE_FORMAT = "yyyy-MM";// 年的加减public static final int SUB_YEAR = Calendar.YEAR;// 月加减public static final int SUB_MONTH = Calendar.MONTH;// 天的加减public static final int SUB_DAY = Calendar.DATE;// 小时的加减public static final int SUB_HOUR = Calendar.HOUR;// 分钟的加减public static final int SUB_MINUTE = Calendar.MINUTE;// 秒的加减public static final int SUB_SECOND = Calendar.SECOND;static final String dayNames[] = {"星期日", "星期一", "星期二", "星期三", "星期四","星期五", "星期六"};private DateTools() {}/*** 把符合日期格式的字符串转换为日期类型*/public static Date stringtoDate(String dateStr, String format) {Date d = null;SimpleDateFormat formater = new SimpleDateFormat(format);try {formater.setLenient(false);d = formater.parse(dateStr);} catch (Exception e) {d = null;}return d;}/*** 把符合日期格式的字符串转换为日期类型*/public static Date stringtoDate(String dateStr, String format,ParsePosition pos) {Date d = null;SimpleDateFormat formater = new SimpleDateFormat(format);try {formater.setLenient(false);d = formater.parse(dateStr, pos);} catch (Exception e) {d = null;}return d;}/*** 把日期转换为字符串*/public static String dateToString(Date date, String format) {String result = "";SimpleDateFormat formater = new SimpleDateFormat(format);try {result = formater.format(date);} catch (Exception e) {}return result;}/*** 获取当前时间的指定格式*/public static String getCurrDate(String format) {return dateToString(new Date(), format);}/*** 获得昨天的指定格式** @return*/public static String getYesterDay(String format) {Calendar c = Calendar.getInstance();c.add(Calendar.DATE, -1);return new SimpleDateFormat(format).format(c.getTime());}/*** 获得昨天的开始时间** @return*/public static Date getYesterDayStartTime() {Calendar c = getYesterDayInstance();String yesterdayStart = new SimpleDateFormat("yyyy-MM-dd 00:00:00").format(c.getTime());return stringtoDate(yesterdayStart, FORMAT_ONE);}/*** 获得昨天的结束时间** @return*/public static Date getYesterDayEndTime() {Calendar c = getYesterDayInstance();String yesterdayEnd = new SimpleDateFormat("yyyy-MM-dd 23:59:59").format(c.getTime());return stringtoDate(yesterdayEnd, FORMAT_ONE);}/*** 日期计算返回String** @param dateKind 类型(SUB_DAY...)* @param dateStr 日期* @param amount 增量* @return*/public static String dateSub(int dateKind, String dateStr, int amount) {Date date = stringtoDate(dateStr, FORMAT_ONE);return dateSub(dateKind, date, amount, FORMAT_ONE);}/*** 日期计算返回String** @param dateKind 类型(SUB_DAY...)* @param date 日期* @param amount 增量* @return*/public static String dateSub(int dateKind, Date date, int amount) {return dateSub(dateKind, date, amount, FORMAT_ONE);}/*** 日期计算返回String** @param dateKind 类型(SUB_DAY...)* @param date 日期* @param amount 增量* @param format 返回格式* @return*/public static String dateSub(int dateKind, Date date, int amount, String format) {return dateToString(dateSubToDate(dateKind, date, amount), format);}/*** 日期计算返回Date** @param dateKind* @param date 日期* @param amount 增量* @return*/public static Date dateSubToDate(int dateKind, Date date, int amount) {Calendar calendar = Calendar.getInstance();calendar.setTime(date);calendar.add(dateKind, amount);return calendar.getTime();}/*** 两个日期相减** @return 相减得到的秒数*/public static long timeSub(String firstTime, String secTime) {Date firstDate = stringtoDate(firstTime, FORMAT_ONE);Date secondDate = stringtoDate(secTime, FORMAT_ONE);if(firstDate == null || secondDate == null) {return -1l;}long first = firstDate.getTime();long second = secondDate.getTime();return (second - first) / 1000;}/*** 获得某月的天数*/public static int getDaysOfMonth(String year, String month) {int days = 0;if (month.equals("1") || month.equals("3") || month.equals("5")|| month.equals("7") || month.equals("8") || month.equals("10")|| month.equals("12")) {days = 31;} else if (month.equals("4") || month.equals("6") || month.equals("9")|| month.equals("11")) {days = 30;} else {if ((Integer.parseInt(year) % 4 == 0 && Integer.parseInt(year) % 100 != 0)|| Integer.parseInt(year) % 400 == 0) {days = 29;} else {days = 28;}}return days;}/*** 获取某年某月的天数*/public static int getDaysOfMonth(int year, int month) {Calendar calendar = Calendar.getInstance();calendar.set(year, month - 1, 1);return calendar.getActualMaximum(Calendar.DAY_OF_MONTH);}/*** 获得当前日期*/public static int getToday() {Calendar calendar = Calendar.getInstance();return calendar.get(Calendar.DATE);}/*** 获得当前月份*/public static int getToMonth() {Calendar calendar = Calendar.getInstance();return calendar.get(Calendar.MONTH) + 1;}/*** 获得当前年份*/public static int getToYear() {Calendar calendar = Calendar.getInstance();return calendar.get(Calendar.YEAR);}/*** 返回日期的天*/public static int getDay(Date date) {Calendar calendar = Calendar.getInstance();calendar.setTime(date);return calendar.get(Calendar.DATE);}/*** 返回日期的年*/public static int getYear(Date date) {Calendar calendar = Calendar.getInstance();calendar.setTime(date);return calendar.get(Calendar.YEAR);}/*** 返回日期的月份,1-12*/public static int getMonth(Date date) {Calendar calendar = Calendar.getInstance();calendar.setTime(date);return calendar.get(Calendar.MONTH) + 1;}/*** 计算两个日期相差的天数,如果date2 > date1 返回正数,否则返回负数*/public static long dayDiff(Date date1, Date date2) {return (date2.getTime() - date1.getTime()) / 86400000;}/*** 比较两个日期的年差*/public static int yearDiff(String before, String after) {Date beforeDay = stringtoDate(before, LONG_DATE_FORMAT);Date afterDay = stringtoDate(after, LONG_DATE_FORMAT);return getYear(afterDay) - getYear(beforeDay);}/*** 比较指定日期与当前日期的差*/public static int yearDiffCurr(String after) {Date beforeDay = new Date();Date afterDay = stringtoDate(after, LONG_DATE_FORMAT);return getYear(beforeDay) - getYear(afterDay);}/*** 比较指定日期与当前日期的差long数据类型*/public static long timeDiffCurr(long after) {return (new Date().getTime()) - after;}/*** 获取每月的第一周*/public static int getFirstWeekdayOfMonth(int year, int month) {Calendar c = Calendar.getInstance();c.setFirstDayOfWeek(Calendar.SATURDAY); // 星期天为第一天c.set(year, month - 1, 1);return c.get(Calendar.DAY_OF_WEEK);}/*** 获取每月的最后一周*/public static int getLastWeekdayOfMonth(int year, int month) {Calendar c = Calendar.getInstance();c.setFirstDayOfWeek(Calendar.SATURDAY); // 星期天为第一天c.set(year, month - 1, getDaysOfMonth(year, month));return c.get(Calendar.DAY_OF_WEEK);}/*** 获取当周内第一天的日期** @param date* @return*/public static Date getFirstWeekdayOfWeek(Date date) {Calendar c = Calendar.getInstance();c.setTime(date);int dayOfWeek = c.get(Calendar.DAY_OF_WEEK) - 1;if (dayOfWeek == 0) {dayOfWeek = 7;}return dateSubToDate(DateTools.SUB_DAY, date, -(dayOfWeek - 1));}public static Date getLastWeekdayOfWeek(Date date) {Calendar c = Calendar.getInstance();c.setTime(date);int dayOfWeek = c.get(Calendar.DAY_OF_WEEK) - 1;if (dayOfWeek == 0) {dayOfWeek = 7;}return dateSubToDate(DateTools.SUB_DAY, date, (7 - dayOfWeek));}/*** unix时间戳转换北京当前时间* @param unixtimestamp unix时间戳* @return 时间格式yyyy-MM-dd HH:mm:ss*/public static Date unixtimestampToDate(String unixtimestamp){String res;SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");long lt = new Long(unixtimestamp)*1000;return new Date(lt);}/*** 获得当前日期字符串,格式"yyyy-MM-dd HH:mm:ss"** @return*/public static String getNow() {Calendar today = Calendar.getInstance();return dateToString(today.getTime(), FORMAT_ONE);}/*** 判断日期是否有效,包括闰年的情况** @param date YYYY-mm-dd* @return*/public static boolean isDate(String date) {StringBuffer reg = new StringBuffer("^((\\d{2}(([02468][048])|([13579][26]))-?((((0?");reg.append("[13578])|(1[02]))-?((0?[1-9])|([1-2][0-9])|(3[01])))");reg.append("|(((0?[469])|(11))-?((0?[1-9])|([1-2][0-9])|(30)))|");reg.append("(0?2-?((0?[1-9])|([1-2][0-9])))))|(\\d{2}(([02468][12");reg.append("35679])|([13579][01345789]))-?((((0?[13578])|(1[02]))");reg.append("-?((0?[1-9])|([1-2][0-9])|(3[01])))|(((0?[469])|(11))");reg.append("-?((0?[1-9])|([1-2][0-9])|(30)))|(0?2-?((0?[");reg.append("1-9])|(1[0-9])|(2[0-8]))))))");Pattern p = Pattern.compile(reg.toString());return p.matcher(date).matches();}/*** 把毫秒转化成日期** @param dateFormat(日期格式,例如:MM/ dd/yyyy HH:mm:ss)* @param millSec(毫秒数)* @return*/public static String longToDate(String dateFormat, Long millSec) {SimpleDateFormat sdf = new SimpleDateFormat(dateFormat);Date date = new Date(millSec);return sdf.format(date);}/*** 比较两Date相差几天、几周、几月、几年** @param fDate* @param oDate* @param type* @return*/public static int daysOfTwo(Date fDate, Date oDate, int type) {long timeLong = 0;int dayNum = 0;switch (type) {case Calendar.HOUR:timeLong = oDate.getTime() - fDate.getTime();dayNum = (int) ((timeLong / 1000) / 3600);return dayNum;case Calendar.DAY_OF_YEAR:timeLong = oDate.getTime() - fDate.getTime();dayNum = (int) (((timeLong / 1000) / 3600) / 24);return dayNum;case Calendar.WEEK_OF_YEAR:timeLong = oDate.getTime() - fDate.getTime();dayNum = (int) (((timeLong / 1000) / 3600) / 24 / 7);return dayNum;case Calendar.MONTH:timeLong = oDate.getTime() - fDate.getTime();dayNum = (int) (((timeLong / 1000) / 3600) / 24 / 31);return dayNum;case Calendar.YEAR:timeLong = oDate.getTime() - fDate.getTime();dayNum = (int) (((timeLong / 1000) / 3600) / 24 / 360);return dayNum;}return 0;}/*** 获取UTC时间 格式:YYYY-MM-DDThh:mm:ssZ** @param date* @return*/public static String getSolrDate(Date date) {SimpleDateFormat sdf1 = new SimpleDateFormat(LONG_DATE_FORMAT);SimpleDateFormat sdf2 = new SimpleDateFormat(LONG_TIME_FORMAT);String result = sdf1.format(date) + "T" + sdf2.format(date) + "Z";return result;}private static Calendar getYesterDayInstance() {Calendar c = Calendar.getInstance();c.add(Calendar.DATE, -1);return c;}/*** local时间转换成UTC时间* @return*/public static String localToUTC() {Date localDate = new Date();long localTimeInMillis = localDate.getTime();/** long时间转换成Calendar */Calendar calendar = Calendar.getInstance();calendar.setTimeInMillis(localTimeInMillis);/** 取得时间偏移量 */int zoneOffset = calendar.get(java.util.Calendar.ZONE_OFFSET);/** 取得夏令时差 */int dstOffset = calendar.get(java.util.Calendar.DST_OFFSET);/** 从本地时间里扣除这些差量,即可以取得UTC时间*/calendar.add(java.util.Calendar.MILLISECOND, -(zoneOffset + dstOffset));/** 取得的时间就是UTC标准时间 */Date utcDate = new Date(calendar.getTimeInMillis());return getSolrDate(utcDate);}/*** utc时间转成local时间* @param utcTime* @return*/public static Date utcToLocal(String utcTime) {SimpleDateFormat sdf = new SimpleDateFormat(FORMAT_ONE);sdf.setTimeZone(TimeZone.getTimeZone("UTC"));Date utcDate = null;try {utcDate = sdf.parse(utcTime);} catch (ParseException e) {e.printStackTrace();}sdf.setTimeZone(TimeZone.getDefault());Date locatlDate = null;String localTime = sdf.format(utcDate.getTime());try {locatlDate = sdf.parse(localTime);} catch (ParseException e) {e.printStackTrace();}return locatlDate;}}
DateUtils - 时间工具类相关推荐
- java dateutils详解_java中DateUtils时间工具类详解
package com.example.administrator.myapp; import java.text.ParseException; import java.text.SimpleDat ...
- Java时间工具类(把日期时间转换成xx秒前、xx分钟前、xx小时前...)
Java时间工具类(把日期时间转换成xx秒前.xx分钟前.xx小时前...) package com.liuzy.javaopen.entity; import java.text.ParseExce ...
- java8的时间工具类_JAVA8日期工具类
/*** Java8日期时间工具类 * *@authorJourWon * @date 2020/12/13*/ public classLocalDateUtils {/*** 显示年月日时分秒,例 ...
- Java中 LocalDate、LocalTime、LocalDateTime三个时间工具类的使用介绍
Java中 LocalDate.LocalTime.LocalDateTime三个时间工具类的使用介绍 一.背景: 之前在做项目的过程中,对日期时间类没有一个系统的了解,总是在用的时候去搜索一下,解决 ...
- java8彩蛋_随笔,JDK8的新时间工具类
jdk8带来了新的时间工具类,主要有LocalDateTime(时间+日期) ,LocalDate(日期) 以及LocalTime(时间).下面来看看常用用法在新的工具类上如何使用. 1. 获取当前的 ...
- 基于jdk8 LocalDate系列API的全新实用时间工具类
基于jdk8 LocalDate系列API的实用时间工具类, 已经经过多个项目的考验与完善, 包含个人心得体会 欢迎转载,转载请注明网址:https://blog.csdn.net/qq_419102 ...
- 分享一个Joda-Time日期时间工具类
写在前面 在JDK1.8之前,处理日期和时间的方式比较单一,Java中提供了Calendar来处理日期,但是过程较为繁琐. 但是在JDK1.8之后,Java更新了time包提供了LocalDate,L ...
- C++时间工具类——纳秒,微秒,毫秒,秒,日期
1.找一个比较全的时间工具类太难了,没人总结啊(适用于linux). #include <ctime> #include <stdint.h> #include <ios ...
- Java8 ,LocalDate,LocalDateTime处理日期和时间工具类,
Java8 ,LocalDate,LocalDateTime处理日期和时间工具类 日期格式化 1.获取今天的日期 2.在Java 8 中获取年.月.日信息 3.在Java 8 中处理特定日期 4.在J ...
- 弄清std::chrono::system_clock::time_point,自定义时间工具类
time_t 是32位的整数,用来存放格林威治时间1970年01月01日00时00分00秒(北京时间1970年01月01日08时00分00秒)起至现在的总秒数,不能表示毫秒,约能表示135年 time ...
最新文章
- [转]卓越科技回应所谓的最牛,最受歧视的招聘
- php小结,PHP编程小结
- lvm 多个硬盘合成一个_「ECS最佳实践」基于多块云盘构建LVM逻辑卷
- rails应用中各数据平台的对接
- 我的SharpDevelop插件之一:知识管理器(2006年博客迁移)
- 我为什么用docker-compose来打包开发环境
- struct、union、enum and sizeof
- 当 Python 中混进一只薛定谔的猫……
- 基于udp的协议netty课设题目_Netty UDP示例
- Aspose.PDF使用教程:使用 C# 创建多列 PDF 文档
- AVR单片机学习笔记
- Centos升级GLIBC
- 从狄仁杰的测字占卜到一淘网的Query分析
- 尝试Ajax数据爬取微博
- php error reporting,php error_reporting
- 2022第十二届中国电子文件管理论坛嘉宾揭晓
- 书法作品落款时间的农历传统雅称摘要
- mysql 全局锁_Mysql全局锁和表级锁
- python英文发音-利用Python制作查单词小程序(二):下载音频并播放单词读音
- 快来直播:互联网内容运营人员的文案写作技巧