java日期处理工具类
- 格式:doc
- 大小:195.50 KB
- 文档页数:36
Java中的日期和时间操作Java中提供了丰富的日期和时间操作的类和方法,方便我们对日期和时间进行处理和计算。
本文将介绍Java中常用的日期和时间操作。
一、日期和时间类在Java中,日期和时间相关的类主要包括以下几个:1. java.util.Date:表示日期和时间的类,常用的构造方法有无参构造方法、接收毫秒数的构造方法和接收年月日的构造方法。
2. java.util.Calendar:提供了对日期和时间进行操作的类,可以进行日期的加减、获取年月日等操作。
3. java.time.LocalDate:表示日期的类,提供了对年月日的操作和计算。
4. java.time.LocalTime:表示时间的类,提供了对时分秒的操作和计算。
5. java.time.LocalDateTime:表示日期和时间的类,提供了对日期时间的操作和计算。
6. java.time.format.DateTimeFormatter:用于日期和时间的格式化,可以将日期时间对象格式化为指定的字符串,或者将字符串解析为对应的日期时间对象。
二、日期和时间操作示例下面分别介绍一些常用的日期和时间操作示例。
1. 获取当前日期和时间:```javaimport java.time.LocalDateTime;public class DateTimeExample {public static void main(String[] args) {LocalDateTime now = LocalDateTime.now(); System.out.println(now);}}```2. 格式化日期和时间:```javaimport java.time.LocalDateTime;import java.time.format.DateTimeFormatter; public class DateTimeExample {public static void main(String[] args) {LocalDateTime now = LocalDateTime.now();DateTimeFormatter formatter =DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");String formattedDateTime = now.format(formatter);System.out.println(formattedDateTime);}}```3. 计算两个日期之间的差值:```javaimport java.time.LocalDate;import java.time.temporal.ChronoUnit;public class DateTimeExample {public static void main(String[] args) {LocalDate date1 = LocalDate.of(2022, 1, 1);LocalDate date2 = LocalDate.of(2022, 12, 31);long daysBetween = ChronoUnit.DAYS.between(date1, date2);System.out.println("Days between: " + daysBetween);}}```4. 日期的加减操作:```javaimport java.time.LocalDate;import java.time.temporal.ChronoUnit;public class DateTimeExample {public static void main(String[] args) {LocalDate now = LocalDate.now();LocalDate oneWeekLater = now.plus(1, ChronoUnit.WEEKS);LocalDate oneMonthEarlier = now.minus(1,ChronoUnit.MONTHS);System.out.println("One week later: " + oneWeekLater);System.out.println("One month earlier: " + oneMonthEarlier);}}```5. 判断某个日期是否在另一个日期之前或之后:```javaimport java.time.LocalDate;public class DateTimeExample {public static void main(String[] args) {LocalDate date1 = LocalDate.of(2022, 1, 1);LocalDate date2 = LocalDate.of(2022, 12, 31);boolean isBefore = date1.isBefore(date2);boolean isAfter = date1.isAfter(date2);System.out.println("Is date1 before date2? " + isBefore); System.out.println("Is date1 after date2? " + isAfter);}}```6. 获取特定日期的年、月、日信息:```javaimport java.time.LocalDate;public class DateTimeExample {public static void main(String[] args) {LocalDate now = LocalDate.now();int year = now.getYear();int month = now.getMonthValue();int day = now.getDayOfMonth();System.out.println("Year: " + year);System.out.println("Month: " + month);System.out.println("Day: " + day);}}```三、总结本文介绍了Java中常用的日期和时间操作,包括日期和时间的类、日期和时间的格式化、日期和时间的计算等内容。
java处理⽇期的⼯具类DateUtil java中处理⽇期的⼯具类DateUtil,供⼤家参考,具体内容如下package com.leo.demo.othertest;import org.slf4j.LoggerFactory;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 java.util.logging.Logger;/*** 时间⼯具类*/public final class DateUtil {private static Logger logger = (Logger) LoggerFactory.getLogger(DateUtil.class);/*** ⽇期格式*/public interface DATE_PATTERN {String HHMMSS = "HHmmss";String HH_MM_SS = "HH:mm:ss";String HH_MM = "HH:mm";String YYYY = "yyyy";String YYYYMMDD = "yyyyMMdd";String YYYYMM = "yyyyMM";String YYYY_MM_DD = "yyyy-MM-dd";String YYYYMMDDHHMMSS = "yyyyMMddHHmmss";String YYYYMMDDHHMMSSSSS = "yyyyMMddHHmmssSSS";String YYYY_MM_DD_HH_MM_SS = "yyyy-MM-dd HH:mm:ss";}/*** 获取当前时间** @return Timestamp对象*/public static Timestamp getCurrontTime() {Timestamp sqlTimestamp = new Timestamp(new Date().getTime());return sqlTimestamp;}/*** 将Date类型转换成String类型** @param date Date对象* @return 形如:"yyyy-MM-dd HH:mm:ss"*/public static String date2String(Date date) {return date2String(date, DATE_PATTERN.YYYY_MM_DD_HH_MM_SS);}/*** 将Date按格式转化成String** @param date Date对象* @param pattern ⽇期类型* @return String*/public static String date2String(Date date, String pattern) {if (date == null || pattern == null) {return null;}return new SimpleDateFormat(pattern).format(date);}/*** 将String类型转换成Date类型** @param date Date对象* @return*/public static Date string2Date(String date) {SimpleDateFormat format = new SimpleDateFormat(DATE_PATTERN.YYYY_MM_DD_HH_MM_SS); try {return format.parse(date);} catch (ParseException e) {return null;}}/*** 获取某⽇期N天后的⽇期** @param datestr* @param day* @return*/public static Date getBeforeAfterDate(String datestr, int day) {SimpleDateFormat df = new SimpleDateFormat(DATE_PATTERN.YYYY_MM_DD_HH_MM_SS);java.sql.Date olddate = null;try {df.setLenient(false);olddate = new java.sql.Date(df.parse(datestr).getTime());} catch (ParseException e) {throw new RuntimeException("⽇期转换错误");}Calendar cal = new GregorianCalendar();cal.setTime(olddate);int Year = cal.get(Calendar.YEAR);int Month = cal.get(Calendar.MONTH);int Day = cal.get(Calendar.DAY_OF_MONTH);int NewDay = Day + day;cal.set(Calendar.YEAR, Year);cal.set(Calendar.MONTH, Month);cal.set(Calendar.DAY_OF_MONTH, NewDay);return new Date(cal.getTimeInMillis());}/*** @return* @Description: 获取当前⽇期的前⼀天* @ReturnType String* @author: liyl* @Created 2015年11⽉13⽇下午5:11:14*/public static Date currentBeforeDay() {Calendar calendar = Calendar.getInstance();calendar.setTime(new Date());calendar.add(Calendar.DAY_OF_MONTH, -1);return calendar.getTime();}/*** @return* @Description: 获取当前⽇期的后⼀天* @ReturnType Date* @author: liyl* @Created 2015年11⽉13⽇下午5:14:54*/public static Date currentNextDay() {Calendar calendar = Calendar.getInstance();calendar.setTime(new Date());calendar.add(Calendar.DAY_OF_MONTH, 1);return calendar.getTime();}/*** 获取指定⽇期星期⼏(int)** @param dt* @return*/public static int getWeekOfInt(Date dt) {int[] weekDays = {7, 1, 2, 3, 4, 5, 6};Calendar cal = Calendar.getInstance();cal.setTime(dt);int w = cal.get(Calendar.DAY_OF_WEEK) - 1;if (w < 0) {w = 0;}return weekDays[w];}/*** 获取指定⽇期星期⼏** @param dt* @return*/public static String getWeekOfDate(Date dt) {String[] weekDays = {"星期⽇", "星期⼀", "星期⼆", "星期三", "星期四", "星期五", "星期六"}; Calendar cal = Calendar.getInstance();cal.setTime(dt);int w = cal.get(Calendar.DAY_OF_WEEK) - 1;if (w < 0) {w = 0;}return weekDays[w];}/*** 时间⽐⼤⼩** @param DATE1* @param DATE2* @param pattern* @return*/public static int compareDate(String DATE1, String DATE2, String pattern) {DateFormat df = new SimpleDateFormat(pattern);try {Date dt1 = df.parse(DATE1);Date dt2 = df.parse(DATE2);if (dt1.getTime() > dt2.getTime()) {System.out.println("dt1 在dt2前");return 1;} else if (dt1.getTime() < dt2.getTime()) {System.out.println("dt1在dt2后");return -1;} else {return 0;}} catch (Exception exception) {exception.printStackTrace();}return 0;}/*** 在⼀个时间上加上或减去分钟** @param date long* @param i int* @return Date*/public static Date addOrMinusMinutes(Date date, int i) {Date rtn = null;GregorianCalendar cal = new GregorianCalendar();cal.setTime(date);cal.add(GregorianCalendar.MINUTE, i);rtn = cal.getTime();return rtn;}/*** 按照指定格式返回格式好的当前⽇期** @param dateFormat 默认yyyy-MM-dd* @return*/public static String getCurrentDateString(String dateFormat) {return DateUtil.format(new Date(), DATE_PATTERN.YYYY_MM_DD);}/*** 说明将⽇期格式化字符串,为null的返回空字符串** @param date* @return*/public static String format(Date date) {if (null == date) return "";SimpleDateFormat sf = new SimpleDateFormat(DATE_PATTERN.YYYY_MM_DD);return sf.format(date);}/*** 说明将⽇期格式化字符串,为null的返回空字符串** @param date ⽇期* @param dateFormat 格式化字符串,⽐如:yyyy-MM-dd* @return*/public static String format(Date date, String dateFormat) {if (null == dateFormat || "".equals(dateFormat)) return DateUtil.format(date);if (null == date) return "";SimpleDateFormat sf = new SimpleDateFormat(dateFormat);return sf.format(date);}/*** @param source 要进⾏解析的源字符串* @return* @说明将指定的字符串格解析成⽇期类型,格式默认为:yyyy-MM-dd*/public static Date parase(String source) {SimpleDateFormat sf = new SimpleDateFormat(DATE_PATTERN.YYYY_MM_DD);try {return sf.parse(source);} catch (ParseException e) {e.printStackTrace();}return null;}/*** @param source 要进⾏解析的源字符串* @param dateFormat 要解析的⽇期格式。
import java.text.ParseException;import java.text.SimpleDateFormat;import java.util.Calendar;import java.util.Date;import java.util.GregorianCalendar;import java.util.Locale;/***日期时间工具类** @author sunflower**/public class DateUtils {private static final SimpleDateFormat datetimeFormat = new SimpleDateFormat("yy-MM-dd HH:mm:ss");private static final SimpleDateFormat dateFormat = new SimpleDateFormat("yy-MM-dd");private static final SimpleDateFormat timeFormat = new SimpleDateFormat("HH:mm:ss");/***获得当前日期时间* <p>*日期时间格式yy-MM-dd HH:mm:ss** @return*/public static String currentDatetime() {return datetimeFormat.format(now());}/***格式化日期时间* <p>*日期时间格式yy-MM-dd HH:mm:ss** @return*/public static String formatDatetime(Date date) { return datetimeFormat.format(date);}/***格式化日期时间** @param date* @param pattern*格式化模式,详见{@link SimpleDateFormat}构造器*<code>SimpleDateFormat(String pattern)</code>* @returnpublic static String formatDatetime(Date date, String pattern) { SimpleDateFormat customFormat = (SimpleDateFormat) datetimeFormat .clone();customFormat.applyPattern(pattern);return customFormat.format(date);}/***获得当前日期* <p>*日期格式yy-MM-dd** @return*/public static String currentDate() {return dateFormat.format(now());}/***格式化日期* <p>*日期格式yy-MM-dd** @return*/public static String formatDate(Date date) {return dateFormat.format(date);}/***获得当前时间* <p>*时间格式HH:ss** @return*/public static String currentTime() {return timeFormat.format(now());}/***格式化时间* <p>*时间格式HH:mm:ss** @return*/public static String formatTime(Date date) {return timeFormat.format(date);}/***获得当前时间的<code>java.util.Date</code>对象** @return */public static Date now() {return new Date();}public static Calendar calendar() { Calendar cal = GregorianCalendar.getInstance(Locale.CHINESE); cal.setFirstDayOfWeek(Calendar.MONDAY);return cal;}/***获得当前时间的毫秒数*详见{@link System#currentTimeMillis()}** @return*/public static long millis() {return System.currentTimeMillis();}/****获得当前Chinese月份** @return */public static int month() {return calendar().get(Calendar.MONTH) + 1;}/***获得月份中的第几天** @return*/public static int dayOfMonth() {return calendar().get(Calendar.DAY_OF_MONTH);}/***今天是星期的第几天** @return*/public static int dayOfWeek() {return calendar().get(Calendar.DAY_OF_WEEK);}/***今天是年中的第几天** @return*/public static int dayOfYear() {return calendar().get(Calendar.DAY_OF_YEAR);}/***判断原日期是否在目标日期之前** @param src* @return*/public static boolean isBefore(Date src, Date dst) {return src.before(dst);}/***判断原日期是否在目标日期之后** @param src* @param dst* @return*/public static boolean isAfter(Date src, Date dst) {return src.after(dst);}/***判断两日期是否相同** @param date1* @param date2* @return*/public static boolean isEqual(Date date1, Date date2) { return date*判断某个日期是否在某个日期范围** @param beginDate *日期范围开始* @param endDate*日期范围结束*需要判断的日期* @return*/public static boolean between(Date beginDate, Date endDate, Date src) { return beginDate.before(src) && endDate.after(src);}/***获得当前月的最后一天* <p>* HH:mm:ss为0,毫秒为999** @return*/public static Date lastDayOfMonth() {Calendar cal = calendar();}cal.set(Calendar.DAY_OF_MONTH, 0); // M月置零cal.set(Calendar.HOUR_OF_DAY, 0);// H置零cal.set(Calendar.MINUTE, 0);// m置零cal.set(Calendar.SECOND, 0);// s置零cal.set(LISECOND, 0);// S置零cal.set(Calendar.MONTH, cal.get(Calendar.MONTH) + 1);//月份+1cal.set(LISECOND, -1);//毫秒-1return cal.getTime();/***获得当前月的第一天* <p>* HH:mm:ss SS为零** @return*/public static Date firstDayOfMonth() {Calendar cal = calendar();cal.set(Calendar.DAY_OF_MONTH, 1); // M月置1cal.set(Calendar.HOUR_OF_DAY, 0);// H置零cal.set(Calendar.MINUTE, 0);// m置零cal.set(Calendar.SECOND, 0);// s置零cal.set(LISECOND, 0);// S置零return cal.getTime();}private static Date weekDay(int week) { Calendar cal = calendar();cal.set(Calendar.DAY_OF_WEEK, week);return cal.getTime();}/***获得周五日期* <p>*注:日历工厂方法{@link#calendar()}设置类每个星期的第一天为Monday,US等每星期第一天为sunday** @return*/public static Date friday() {return weekDay(Calendar.FRIDAY);}/***获得周六日期* <p>*注:日历工厂方法{@link#calendar()}设置类每个星期的第一天为Monday,US等每星期第一天为sunday** @return*/public static Date saturday() {return weekDay(Calendar.SATURDAY);}/***获得周日日期* <p>*注:日历工厂方法{@link#calendar()}设置类每个星期的第一天为Monday,US等每星期第一天为sunday** @return*/public static Date sunday() {return weekDay(Calendar.SUNDAY);}/***将字符串日期时间转换成java.util.Date类型* <p>*日期时间格式yy-MM-dd HH:mm:ss** @param datetime* @return*/public static Date parseDatetime(String datetime) throws ParseException { return datetimeFormat.parse(datetime);}/***将字符串日期转换成java.util.Date类型*<p>}*日期时间格式yy-MM-dd** @param date* @return* @throws ParseException*/public static Date parseDate(String date) throws ParseException {return dateFormat.parse(date);}/***将字符串日期转换成java.util.Date类型*<p>*时间格式HH:mm:ss** @param time* @return* @throws ParseException*/public static Date parseTime(String time) throws ParseException {return timeFormat.parse(time);}/***根据自定义pattern将字符串日期转换成java.util.Date类型** @param datetime* @param pattern* @return* @throws ParseException*/public static Date parseDatetime(String datetime, String pattern)throws ParseException {SimpleDateFormat format = (SimpleDateFormat) datetimeFormat.clone();format.applyPattern(pattern);return format.parse(datetime);}11/ 11。
JAVA常用日历|日期|时间|星期工具类(封装方法非常多)相信大部分程序语言都需要处理日期、日历和时间相关的数据。
本工具类是基于JAVA语言,封装了常用的方法,这些方法来源于各种实际项目,大部分都是会直接用到的。
此工具类不依赖第三方JAR包,可以直接放入您的项目中使用。
方法全是自己手写的,若有不正确之处还请指出。
此工具类会不断更新完善,有需要的就收藏一下吧。
import java.text.ParseException;import java.text.SimpleDateFormat;import java.util.Arrays;import java.util.Calendar;import java.util.Date;import java.util.GregorianCalendar;/*** 日历日期工具类* @decription提供常用的获取日期、星期、周数以及转换操作* @author Zebe* @date 2014/11/27* @version 1.0.2*/public class CalendarUtil {private static int WEEKS = 0;private static SimpleDateFormat SDF = new SimpleDateFormat("yyyy-MM-dd");private static SimpleDateFormat SDFT = new SimpleDateFormat("yyyy-MM-dd HH:m m:ss");/*** 获取当前年份* @return String 例如:2014*/public static String getYear() {Calendar cd = Calendar.getInstance();return String.valueOf(cd.get(Calendar.YEAR));}/*** 获取某个日期中的年份* @return String 例如:2014-05-16 返回 2014*/public static String getYearOfDate(String date) {Calendar cd = Calendar.getInstance();try {cd.setTime(SDF.parse(date));} catch (Exception e) {e.printStackTrace();}return String.valueOf(cd.get(Calendar.YEAR));}/*** 获取当前月份* @return String 例如:4*/public static String getMonth() {Calendar cd = Calendar.getInstance();return String.valueOf(cd.get(Calendar.MONTH) + 1);}/*** 获取某个日期中的月份* @return String 例如:2014-05-16 返回 5*/public static String getMonthOfDate(String date) {Calendar cd = Calendar.getInstance();try {cd.setTime(SDF.parse(date));} catch (Exception e) {e.printStackTrace();}return String.valueOf(cd.get(Calendar.MONTH) + 1); }/*** 获取日期中的英文月份缩写* @return String*/public static String getMonthShortEnNameOfDate(String date) { Calendar cd = Calendar.getInstance();String result = "";try {cd.setTime(SDF.parse(date));int month = cd.get(Calendar.MONTH) + 1;switch (month) {case1:result = "JAN";break;result = "FEB";break;case3:result = "MAR";break;case4:result = "APR";break;case5:result = "MAY";break;case6:result = "JUN";break;case7:result = "JUL";break;case8:result = "AUG";break;case9:result = "SEP";break;case10:result = "OCT";break;case11:result = "NOV";break;result = "DEC";break;}} catch (Exception e) {e.printStackTrace();}return result;}/*** 获取当前日期* @return String 例如:23*/public static String getDay() {Calendar cd = Calendar.getInstance();return String.valueOf(cd.get(Calendar.DAY_OF_MONTH)); }/*** 获取某个日期中的日期* @return String 例如:2014-05-16 返回 16*/public static String getDayOfDate(String date) {Calendar cd = Calendar.getInstance();try {cd.setTime(SDF.parse(date));} catch (Exception e) {e.printStackTrace();}return String.valueOf(cd.get(Calendar.DAY_OF_MONTH)); }/*** 获取昨天日期* @return yyyy-MM-dd*/public static String getYesterday() {Calendar cal = Calendar.getInstance();try {cal.setTime(SDF.parse(getToday()));cal.add(Calendar.DAY_OF_YEAR, -1);} catch (Exception e) {e.printStackTrace();}return SDF.format(cal.getTime());}/*** 获取今天日期* @return yyyy-MM-dd*/public static String getToday() {return SDF.format(new Date());}/*** 获取明天日期* @return yyyy-MM-dd*/public static String getTommorow() {Calendar cal = Calendar.getInstance();try {cal.setTime(SDF.parse(getToday()));cal.add(Calendar.DAY_OF_YEAR, +1);} catch (Exception e) {e.printStackTrace();}return SDF.format(cal.getTime());}/*** 获取当前日期和时间* @return yyyy-MM-dd HH:mm:ss*/public static String getDateTime() {return SDFT.format(new Date());}/*** 获得当前日期与本周一相差的天数* @return int*/private static int getMondayPlus() {Calendar cd = Calendar.getInstance();// 获得今天是一周的第几天,星期日是第一天,星期二是第二天......int dayOfWeek = cd.get(Calendar.DAY_OF_WEEK);if (dayOfWeek == 1) {return -6;} else {return2 - dayOfWeek;}}/*** 获得上周星期一的日期* @return yyyy-MM-dd*/public static String getPreMonday() {WEEKS--;int mondayPlus = getMondayPlus();GregorianCalendar currentDate = new GregorianCalendar();currentDate.add(GregorianCalendar.DATE, mondayPlus + 7 * WEEKS);Date monday = currentDate.getTime();SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");return sdf.format(monday);}/*** 获得本周星期一的日期* @return yyyy-MM-dd*/public static String getMonday() {WEEKS = 0;int mondayPlus = getMondayPlus();GregorianCalendar currentDate = new GregorianCalendar();currentDate.add(GregorianCalendar.DATE, mondayPlus);Date monday = currentDate.getTime();SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");return sdf.format(monday);}/*** 获得下周星期一的日期* @return yyyy-MM-dd*/public static String getNextMonday() {WEEKS++;int mondayPlus = getMondayPlus();GregorianCalendar currentDate = new GregorianCalendar();currentDate.add(GregorianCalendar.DATE, mondayPlus + 7 * WEEKS);Date monday = currentDate.getTime();SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");return sdf.format(monday);}/*** 获取某一年第几周的星期一* @return yyyy-MM-dd*/public static String getMondayOfWeek(int year, int week) {Calendar cal = Calendar.getInstance();cal.setFirstDayOfWeek(Calendar.MONDAY);cal.clear();cal.set(Calendar.YEAR, year);cal.set(Calendar.WEEK_OF_YEAR,week);cal.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY);return SDF.format(cal.getTime());}/*** 获取某一年第几周的星期日* @return yyyy-MM-dd*/public static String getSundayOfWeek(int year, int week) {Calendar cal = Calendar.getInstance();cal.setFirstDayOfWeek(Calendar.MONDAY);cal.clear();cal.set(Calendar.YEAR, year);cal.set(Calendar.WEEK_OF_YEAR,week);cal.set(Calendar.DAY_OF_WEEK, Calendar.SUNDAY);return SDF.format(cal.getTime());}/*** 获取指定周星期日的日期* @return yyyy-MM-dd*/public static String getSunday() {int mondayPlus = getMondayPlus();GregorianCalendar currentDate = new GregorianCalendar();currentDate.add(GregorianCalendar.DATE, mondayPlus + 7 * WEEKS + 6);Date monday = currentDate.getTime();SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");return sdf.format(monday);}/*** 获取当前周是本月的第几周* @return String*/public static int getWeekOfMonth() {Calendar cd = Calendar.getInstance();cd.setFirstDayOfWeek(Calendar.MONDAY);return cd.get(Calendar.WEEK_OF_MONTH);}/*** 获取当前周是本年的第几周* @return String*/public static int getWeekOfYear() {Calendar cd = Calendar.getInstance();cd.setFirstDayOfWeek(Calendar.MONDAY);return cd.get(Calendar.WEEK_OF_YEAR);}/*** 获取本月第一天* @param date* @return yyyy-MM-dd*/public static String getFirstDayOfThisMonth() {String year = getYear();String month = getMonth();if (month.length() == 1) {return year + "-0" + month + "-01";}return year + "-" + month + "-01";}/*** 获取本月最后一天* @param date* @return yyyy-MM-dd*/public static String getLastDayOfThisMonth() {Calendar calendar = Calendar.getInstance();try {calendar.set(calendar.get(Calendar.YEAR), calendar.get(Cal endar.MONTH) + 1, 1);calendar.add(Calendar.DATE, -1);} catch (Exception e) {e.printStackTrace();}return SDF.format(calendar.getTime());}/*** 获取指定年份月份的最后一天(整形参数)* @param month* @return yyyy-MM-dd*/public static String getLastDayOfMonth(int year, int month) {Calendar calendar = Calendar.getInstance();try {calendar.set(year, month, 1);calendar.add(Calendar.DATE, -1);} catch (Exception e) {}return SDF.format(calendar.getTime());}/*** 获取指定年份月份的最后一天(字符串参数)* @param month* @return yyyy-MM-dd*/public static String getLastDayOfMonth(String year, String month) { int y = Integer.parseInt(year);int m = Integer.parseInt(month);return getLastDayOfMonth(y, m);}/*** 获取两个日期之间相差天数* @param fromDay* @param toDay* @return long*/public static long getDaysBetween(String fromDay, String toDay) { long days = 0;try {Date d1 = SDF.parse(fromDay);Date d2 = SDF.parse(toDay);long diff = d2.getTime() - d1.getTime();days = diff / (1000 * 60 * 60 * 24);} catch (Exception e) {}return days;}/*** 按指定格式转换日期对象为字符串* @param date 日期对象* @param format 日期格式,如:yyyy-MM-dd HH:mm:ss* @return String*/public static String convertDateToString(Date date, String format) { SimpleDateFormat mySDF = new SimpleDateFormat(format);String dateStr = mySDF.format(date);return dateStr;}/*** 按指定格式转换字符串为日期对象* @param date 字符串日期* @param format 日期格式,如:yyyy-MM-dd HH:mm:ss* @return String*/public static Date convertStringToDate(String date, String format) { try {SimpleDateFormat mySDF = new SimpleDateFormat(format);Date dateTemp = mySDF.parse(date);return dateTemp;} catch (Exception e) {e.printStackTrace();return null;}}/*** 获取指定分钟前的时间字符串* @param minute 分钟* @return String yyyy-MM-dd HH:mm:ss*/public static String getPastTimeByMinute(int minute) {Date date = new Date(new Date().getTime() - (minute * 60 * 1000));return convertDateToString(date, "yyyy-MM-dd HH:mm:ss");}/*** 获取指定分钟前的时间字符串(自定义格式)* @param minute 分钟* @param format 日期格式,如:yyyy-MM-dd HH:mm:ss* @return String*/public static String getPastTimeByMinute(int minute, String format) { Date date = new Date(new Date().getTime() - (minute * 60 * 1000));return convertDateToString(date, format);}/*** 获取指定天数前的时间字符串* @param day 天数* @return String yyyy-MM-dd HH:mm:ss*/public static String getPastTimeByDay(int day) {Date date = new Date(new Date().getTime() - (day * 24 * 60 * 60 * 10 00));return convertDateToString(date, "yyyy-MM-dd HH:mm:ss");}/*** 获取指定天数前的时间字符串(自定义格式)* @param day 天数* @param format 日期格式,如:yyyy-MM-dd HH:mm:ss* @return String yyyy-MM-dd HH:mm:ss*/public static String getPastTimeByDay(int day, String format) {Date date = new Date(new Date().getTime() - (day * 24 * 60 * 60 * 10 00));return convertDateToString(date, format);}/*** 获取基于某个时间点后多少天后的时间点* @description如:2015-08-01 16:00:05,15天之后的时间点是* @param beginTime 开始时间点 yyyy-MM-dd HH:mm:ss* @param day 天数* @return String yyyy-MM-dd HH:mm:ss*/public static String getFutureTimeByDay(String beginTime, int day) {Date futureDate = new Date();try {Date debinDate = SDFT.parse(beginTime);futureDate = new Date(debinDate.getTime() + (day * 24 * 60 * 60 * 1000));} catch (ParseException e) {// TODO Auto-generated catch blocke.printStackTrace();}return convertDateToString(futureDate, "yyyy-MM-dd HH:mm:ss");}/*** 判断一组日期是否连续* @param dates Date数组* @return boolean*/public static boolean isContinuousDate(Date[] dates) {SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");long[] datesNew;boolean continuous = false;try {if (dates != null && dates.length >= 2) {// 通过 yyyy-MM-dd 进行格式化并得到一个long类型的日期数组datesNew = new long[dates.length];for (int i=0; i<dates.length; i++) {datesNew[i] = sdf.parse(sdf.format(date s[i])).getTime();}// 对这个数组进行排序Arrays.sort(datesNew);// 遍历新的日期数组,计算两个日期间的时间差(8640 0000为一整天的差距)for (int i=0; i<datesNew.length; i++) {Long tempDate = datesNew[i];if ((i + 1) < datesNew.length) {Long nextDate = datesNew[i + 1];if (Math.abs(tempDate - nextD ate) != 86400000) {return false;}}}return true;}} catch (Exception e) {e.printStackTrace();}return continuous;}/*** 方法测试* @param args* @throws ParseException*/public static void main(String[] args)throws ParseException {System.out.println("获取当前年:" + getYear());System.out.println("获取日期中的年份:" + getYearOfDate("2012-12-08 "));System.out.println("获取当前月:" + getMonth());System.out.println("获取日期中的月份:" + getMonthOfDate("2012-12-08 "));System.out.println("获取当前日:" + getDay());System.out.println("获取日期中的日:" + getDayOfDate("2012-12-08"));System.out.println("获取昨天日期:" + getYesterday());System.out.println("获取今天日期:" + getToday());System.out.println("获取明天日期:" + getTommorow());System.out.println("获取当前日期和时间:" + getDateTime());System.out.println("获得当前日期与本周一相差的天数:" + getMondayPlu s());System.out.println("获得上周星期一的日期:" + getPreMonday());System.out.println("获得上周星期日的日期:" + getSunday());System.out.println("获得本周星期一的日期:" + getMonday());System.out.println("获得本周星期日的日期:" + getSunday());System.out.println("获得下周星期一的日期:" + getNextMonday());System.out.println("获得下周星期日的日期:" + getSunday());System.out.println("获取当前周是本月的第几周:" + getWeekOfMonth());System.out.println("获取当前周是本年的第几周:" + getWeekOfYear());System.out.println("获取本月第一天:" + getFirstDayOfThisMonth());System.out.println("获取本月最后一天:" + getLastDayOfThisMonth());System.out.println("获取指定年份月份最后一天:" + getLastDayOfMonth(2 044, 2) + " <2044年2月>");System.out.println("获取两个日期之间相差天数:" + getDaysBetween("20 14-09-30", "2014-10-02") + " <2014-09-30~2014-12-02>");System.out.println("按指定格式转换日期对象为字符串:" + convertDateT oString(new Date(), "yyyy-MM-dd HH:mm:ss"));System.out.println("按指定格式转换字符串为日期对象:" + convertStrin gToDate("2015-12-12", "yyyy-MM-dd"));System.out.println("获取某一年第几周的星期一:" + getMondayOfWeek(20 14, 51));System.out.println("获取某一年第几周的星期日:" + getSundayOfWeek(20 14, 51));System.out.println("按照 yyy-M-d HH:mm 格式得到当前日期时间:" + con vertDateToString(new Date(), "yyyy-M-d HH:mm"));System.out.println("5分钟前的时间:" + getPastTimeByMinute(5));System.out.println("2天前的此时此刻:" + getPastTimeByDay(2));System.out.println("时间点 2015-08-21 16:00:05,12天之后的时间点是" + getFutureTimeByDay("2015-08-21 16:00:05", 12));// 判断连续日期Date d1 = new SimpleDateFormat("yyyy-MM-dd").parse("2015-11-18 15:5 6:20");Date d2 = new SimpleDateFormat("yyyy-MM-dd").parse("2015-11-19 14:5 3:23");Date d3 = new SimpleDateFormat("yyyy-MM-dd").parse("2015-11-20 14:2 2:20");Date d4 = new SimpleDateFormat("yyyy-MM-dd").parse("2015-11-21 19:5 6:32");Date[] dates = {d1, d2, d3, d4};System.out.println(SDF.format(d1) + "," + SDF.format(d2) + "," + SD F.format(d3) + "," + SDF.format(d4) + " 是连续日期吗?" + isContinuousDate(dates));}}调用更多,写更少!此工具类来源于【最全面的编程语言工具类平台】:。
JAVA处理日期时间常用方法1. Date类:在java.util包中,Date类表示特定的瞬间,使用当前时刻创建一个Date对象,可以使用无参构造函数Date(或者System.currentTimeMillis(方法。
```javaimport java.util.Date;public class DateExamplepublic static void main(String[] args)Date now = new Date(; // 当前时间System.out.println(now);}```输出结果为:Wed Oct 20 09:38:45 CST 20242. Calendar类:在java.util包中,Calendar类是一个抽象基类,用于获取并操作日历字段,可以进行日期和时间的加、减、格式化等操作。
```javaimport java.util.Calendar;public class CalendarExamplepublic static void main(String[] args)Calendar cal = Calendar.getInstance(;int year = cal.get(Calendar.YEAR);int month = cal.get(Calendar.MONTH) + 1; // 月份从0开始,需要加1int day = cal.get(Calendar.DAY_OF_MONTH);int hour = cal.get(Calendar.HOUR_OF_DAY);int minute = cal.get(Calendar.MINUTE);int second = cal.get(Calendar.SECOND);System.out.println(year + "-" + month + "-" + day + " " + hour + ":" + minute + ":" + second);}```输出结果为:2024-10-209:38:453. SimpleDateFormat类:在java.text包中,SimpleDateFormat类用于将日期格式化为指定的模式。
java⽇期时间转换⼯具类java⽇期时间转换⼯具类1.实现⽇期格式和类型转换2.获得星期,时,分,秒3.⽇期⽐较4.⽣成账号和流⽔号Java代码1. import java.text.SimpleDateFormat;2. import java.util.Calendar;3. import java.util.Date;4. import java.util.regex.Pattern;5.6. /**7. * ⽇期时间转换⼯具类8. */9. public class DateUtil {10.11. public static String FILE_NAME = "MMddHHmmssSSS";12. public static String DEFAULT_PATTERN = "yyyy-MM-dd";13. public static String DIR_PATTERN = "yyyy/MM/dd/";14. public static String TIMESTAMP_PATTERN = "yyyy-MM-dd HH:mm:ss";15. public static String TIMES_PATTERN = "HH:mm:ss";16. public static String NOCHAR_PATTERN = "yyyyMMddHHmmss";17.18. /**19. * 获取当前时间戳20. *21. * @param date22. *23. * @return24. */25. public static String formatDefaultFileName() {26. return formatDateByFormat(new Date(), FILE_NAME);27. }28.29. /**30. * ⽇期转换为字符串31. *32. * @param date33. * ⽇期34. * @param format35. * ⽇期格式36. * @return 指定格式的⽇期字符串37. */38. public static String formatDateByFormat(Date date, String format) {39. String result = "";40. if (date != null) {41. try {42. SimpleDateFormat sdf = new SimpleDateFormat(format);43. result = sdf.format(date);44. } catch (Exception ex) {45. ex.printStackTrace();46. }47. }48. return result;49. }50.51. /**52. * 转换为默认格式(yyyy-MM-dd)的⽇期字符串53. *54. * @param date55. *56. * @return57. */58. public static String formatDefaultDate(Date date) {59. return formatDateByFormat(date, DEFAULT_PATTERN);60. }61.62. /**63. * 转换为⽬录格式(yyyy/MM/dd/)的⽇期字符串64. *65. * @param date66. *67. * @return68. */69. public static String formatDirDate(Date date) {70. return formatDateByFormat(date, DIR_PATTERN);71. }72.73. /**74. * 转换为完整格式(yyyy-MM-dd HH:mm:ss)的⽇期字符串75. *76. * @param date77. *78. * @return79. */80. public static String formatTimesTampDate(Date date) {81. return formatDateByFormat(date, TIMESTAMP_PATTERN);82. }83.84. /**85. * 转换为时分秒格式(HH:mm:ss)的⽇期字符串86. *87. * @param date88. *89. * @return90. */91. public static String formatTimesDate(Date date) {92. return formatDateByFormat(date, TIMES_PATTERN);93. }94.95. /**96. * 转换为时分秒格式(HH:mm:ss)的⽇期字符串97. *98. * @param date99. *100. * @return101. */102. public static String formatNoCharDate(Date date) {103. return formatDateByFormat(date, NOCHAR_PATTERN); 104. }105.106. /**107. * ⽇期格式字符串转换为⽇期对象108. *109. * @param strDate110. * ⽇期格式字符串111. * @param pattern112. * ⽇期对象113. * @return114. */115. public static Date parseDate(String strDate, String pattern) { 116. try {117. SimpleDateFormat format = new SimpleDateFormat(pattern); 118. Date nowDate = format.parse(strDate);119. return nowDate;120. } catch (Exception e) {121. e.printStackTrace();122. }123. return null;124. }125.126. /**127. * 字符串转换为默认格式(yyyy-MM-dd)⽇期对象128. *129. * @param date130. *131. * @return132. *133. * @throws Exception134. */135. public static Date parseDefaultDate(String date) {136. return parseDate(date, DEFAULT_PATTERN);137. }138.139. /**140. * 字符串转换为完整格式(yyyy-MM-dd HH:mm:ss)⽇期对象141. *142. * @param date143. *144. * @return145. *146. * @throws Exception147. */148. public static Date parseTimesTampDate(String date) { 149. return parseDate(date, TIMESTAMP_PATTERN); 150. }151.152. /**153. * 获得当前时间154. *155. * @return156. */157. public static Date getCurrentDate() {158. Calendar calendar = Calendar.getInstance();159. return calendar.getTime();160. }161.162. /**163. * sql Date 转 util Date164. *165. * @param date166. * java.sql.Date⽇期167. * @return java.util.Date168. */169. public static Date parseUtilDate(java.sql.Date date) { 170. return date;171. }172.173. /**174. * util Date 转 sql Date175. *176. * @param date177. * java.sql.Date⽇期178. * @return179. */180. public static java.sql.Date parseSqlDate(Date date) { 181. return new java.sql.Date(date.getTime());182. }183.184. /**185. * 获取年份186. *187. * @param date188. *189. * @return190. */191. public static int getYear(Date date) {192. Calendar c = Calendar.getInstance();193. c.setTime(date);194. return c.get(Calendar.YEAR);195. }196.197. /**198. * 获取⽉份199. *200. * @param date201. *202. * @return203. */204. public static int getMonth(Date date) {205. Calendar c = Calendar.getInstance();206. c.setTime(date);207. return c.get(Calendar.MONTH) + 1;208. }209.210. /**211. * 获取星期212. *213. * @param date214. *215. * @return216. */217. public static int getWeek(Date date) {218. Calendar c = Calendar.getInstance();219. c.setTime(date);220. int dayOfWeek = c.get(Calendar.DAY_OF_WEEK); 221. dayOfWeek = dayOfWeek - 1;222. if (dayOfWeek == 0) {223. dayOfWeek = 7;224. }225. return dayOfWeek;226. }227.228. /**229. * 获取⽇期(多少号)230. *231. * @param date232. *233. * @return234. */235. public static int getDay(Date date) {236. Calendar c = Calendar.getInstance();237. c.setTime(date);238. return c.get(Calendar.DAY_OF_MONTH);239. }240.241. /**242. * 获取当前时间(⼩时)243. *244. * @param date245. *246. * @return247. */248. public static int getHour(Date date) {249. Calendar c = Calendar.getInstance();250. c.setTime(date);251. return c.get(Calendar.HOUR_OF_DAY);252. }253.254. /**255. * 获取当前时间(分)256. *257. * @param date258. *259. * @return260. */261. public static int getMinute(Date date) {262. Calendar c = Calendar.getInstance();263. c.setTime(date);264. return c.get(Calendar.MINUTE);265. }266.267. /**268. * 获取当前时间(秒)269. *270. * @param date271. *272. * @return273. */274. public static int getSecond(Date date) {275. Calendar c = Calendar.getInstance();276. c.setTime(date);277. return c.get(Calendar.SECOND);278. }279.280. /**281. * 获取当前毫秒282. *283. * @param date284. *285. * @return286. */287. public static long getMillis(Date date) {288. Calendar c = Calendar.getInstance();289. c.setTime(date);290. return c.getTimeInMillis();291. }292.293. /**294. * ⽇期增加295. *296. * @param date297. * Date298. *299. * @param day300. * int301. *302. * @return Date303. */304. public static Date addDate(Date date, int day) {305. java.util.Calendar c = java.util.Calendar.getInstance();306. c.setTimeInMillis(getMillis(date) + ((long) day) * 24 * 3600 * 1000); 307. return c.getTime();308. }309.310. /**311. * ⽇期相减(返回天数)312. *313. * @param date314. * Date315. *316. * @param date1317. * Date318. *319. * @return int 相差的天数320. */321. public static int diffDate(Date date, Date date1) {322. return (int) ((getMillis(date) - getMillis(date1)) / (24 * 3600 * 1000)); 323. }324.325. /**326. * ⽇期相减(返回秒值)327. *328. * @param date329. * Date330. * @param date1331. * Date332. * @return int333. * @author334. */335. public static Long diffDateTime(Date date, Date date1) {336. return (Long) ((getMillis(date) - getMillis(date1)) / 1000);337. }338.339. private static String[] randomValues = new String[] { "0", "1", "2", "3", 340. "4", "5", "6", "7", "8", "9", "a", "b", "c", "d", "e", "f", "g",341. "h", "i", "j", "k", "l", "m", "n", "u", "t", "s", "o", "x", "v",342. "p", "q", "r", "w", "y", "z" };343.344. public static String getRandomNumber(int lenght) {345. StringBuffer str = new StringBuffer();346. for (int i = 0; i < lenght; i++) {347. Double number = Math.random() * (randomValues.length - 1); 348. str.append(randomValues[number.intValue()]);349. }350. return str.toString();351. }352.353. /**354. * ⽣成账号355. *356. * @param acount357. * @return358. */359. public static String nextAcounnt(String acount) {360. String newAcc = "";361. if (Integer.parseInt(acount) < 10000) {362. Integer newAc = Integer.parseInt(acount) + 1;363. if (newAc < 1000) {364. int count = String.valueOf(newAc).length();365. if (count == 1) {366. newAcc = "000" + newAc;367. } else if (count == 2) {368. newAcc = "00" + newAc;369. } else if (count == 3) {370. newAcc = "0" + newAc;371. }372. } else {373. newAcc = String.valueOf(newAc);374. }375. } else {376. newAcc = acount;377. }378. return newAcc;379. }380.381. public static boolean isNumeric1(String str) {382. if (str != null && !"".equals(str) && str.length()<=9) {383. Pattern pattern = pile("[0-9]*");384. return pattern.matcher(str).matches();385. } else {386. return false;387. }388. }389.390. /**391. * ⽣成流⽔号392. *393. * @param t394. * 流⽔号位数395. * @return 流⽔号396. */397. public static String getSequenceNumber(int t) {398. Date d = new Date();399. SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddhhmmss"); 400. String str = sdf.format(d);401. String haomiao = String.valueOf(System.nanoTime());402. str = str + haomiao.substring(haomiao.length() - 6, haomiao.length()); 403. return str.substring(str.length() - t, str.length());404. }405. }。
java实现的⽇期时间转换⼯具类完整⽰例本⽂实例讲述了java实现的⽇期时间转换⼯具类。
分享给⼤家供⼤家参考,具体如下:最基础的东西,总结⼀下,下次⽤的时候就⽅便⼀些了。
废话不多说,直接贴代码:package com.incar.base.util;import com.incar.base.exception.BaseRuntimeException;import java.text.DateFormat;import java.text.ParseException;import java.text.SimpleDateFormat;import java.time.*;import java.time.temporal.ChronoField;import java.time.temporal.ChronoUnit;import java.time.temporal.WeekFields;import java.util.*;/*** Created by Administrator on 2017/4/11.*/public class DateUtil {public final static String DATE_FORMAT_DAY = "yyyy-MM-dd";public final static String DATE_FORMAT_SECOND = "yyyy-MM-dd HH:mm:ss";private final static int[] DATE_UNIT_ARR = new int[]{LISECOND, Calendar.SECOND, Calendar.MINUTE, Calendar.HOUR_OF_DAY, Calendar.DATE, Calendar.MONTH, Calendar.YEAR};public static Calendar calendar = null;public static DateFormat dateFormat = null;public static Date date = null;/*** 将⽇期转为字符串* @param date* @param format* @return*/public static String dateToString(Date date, String format) {if (date == null) {return null;}return new SimpleDateFormat(format).format(date);}/*** 将⽇期转换为字符串(转换的时间按照当前登录⽤户的时区)** @param date* @param format* @param timeZone* @return*/public static String dateToString(Date date, String format, String timeZone) {if (date == null) {return null;}//1、格式化⽇期return getTimeZoneSimpleDateFormat(format, timeZone).format(date);}/*** 获取当前登录⽤户的⽇期格式化对象** @param timeZone* @param format* @return*/private static SimpleDateFormat getTimeZoneSimpleDateFormat(String format, String timeZone) {//1、获取对应时区的格式化器SimpleDateFormat simpleDateFormat = new SimpleDateFormat(format);simpleDateFormat.setTimeZone(TimeZone.getTimeZone(timeZone));return simpleDateFormat;}/***将字符串转为⽇期(转换的时间按照当前登录⽤户的时区)* @param dateStr* @param format* @return*/public static Date stringToDate(String dateStr, String format, String timeZone) {if (dateStr == null || format == null) {return null;}try {return getTimeZoneSimpleDateFormat(format, timeZone).parse(dateStr); } catch (ParseException e) {throw BaseRuntimeException.getException(e);}}/***将字符串转为⽇期* @param dateStr* @param format* @return*/public static Date stringToDate_CTT(String dateStr, String format) {if (dateStr == null || format == null) {return null;}try {return getTimeZoneSimpleDateFormat(format, "CTT").parse(dateStr);} catch (ParseException e) {throw BaseRuntimeException.getException(e);}}/*** 获取最近在当前⽇期之前的最后⼀个⽇期单位** @param date* @param calendarUnit 只⽀持 DateUtil.DATE_UNIT_ARR* @return*/public static Date getFloorDate(Date date, int calendarUnit) {if (date == null) {return null;}Calendar calendar = Calendar.getInstance();calendar.setTime(date);for (int i = 0; i <= DATE_UNIT_ARR.length - 1; i++) {if (DATE_UNIT_ARR[i] > calendarUnit) {if (Calendar.DATE == DATE_UNIT_ARR[i]) {calendar.set(DATE_UNIT_ARR[i], 1);} else {calendar.set(DATE_UNIT_ARR[i], 0);}}if (DATE_UNIT_ARR[i] == calendarUnit) {break;}}return calendar.getTime();}/*** 获取最近在当前⽇期之后的第⼀个⽇期单位** @param date* @param calendarUnit 只⽀持 DateUtil.DATE_UNIT_ARR* @return*/public static Date getCeilDate(Date date, int calendarUnit) {if (date == null) {return null;}Calendar calendar = Calendar.getInstance();calendar.setTime(date);for (int i = 0; i <= DATE_UNIT_ARR.length - 1; i++) {if (DATE_UNIT_ARR[i] > calendarUnit) {if (Calendar.DATE == DATE_UNIT_ARR[i]) {calendar.set(DATE_UNIT_ARR[i], 1);} else {calendar.set(DATE_UNIT_ARR[i], 0);}}if (DATE_UNIT_ARR[i] == calendarUnit) {calendar.add(DATE_UNIT_ARR[i], 1);break;}}return calendar.getTime();}/*** 将开始时间、结束时间根据⽇期单位划分成时间段*** @param startDate* @param endDate* @param calendarUnit Calendar.MONTH,Calendar.DATE* @param dateNum 指定的单位⽇期数量* @return 每⼀个数组第⼀个为开始时间,第⼆个为结束时间; 第⼀个元素结束时间总是等于第⼆元素开始时间*/public static List<Date[]> splitDate(Date startDate, Date endDate, int calendarUnit, int dateNum) {List<Date[]> returnList = new ArrayList<>();if (startDate.getTime() > endDate.getTime()) {return null;}Calendar c1 = Calendar.getInstance();Calendar c2 = Calendar.getInstance();c1.setTime(startDate);c2.setTime(endDate);Calendar curC1 = Calendar.getInstance();Calendar curC2 = null;curC1.setTime(startDate);while (curC2 == null || curC2.before(c2)) {if (curC2 == null) {curC2 = Calendar.getInstance();curC2.setTime(startDate);curC2.add(calendarUnit, dateNum);} else {curC1.add(calendarUnit, dateNum);curC2.add(calendarUnit, dateNum);}returnList.add(new Date[]{curC1.getTime(), curC2.getTime()});}//设置最后⼀个区间的截⾄⽇期为endDatereturnList.get(returnList.size() - 1)[1] = endDate;return returnList;}/*** 获取开始时间结束时间按照⽇期单位形成多个⽇期区间* 分割出来的时间区间以* 第⼀个区间开始时间为传⼊开始时间* 最后⼀个区间结束时间为传⼊结束时间* @param startDate* @param endDate* @param unit 1:代表按⽇;2:代表按周;3:代表按⽉* @return*/public static List<Date[]> rangeDate(Date startDate, Date endDate, int unit){List<Date[]> returnList=new ArrayList<>();LocalDateTime ldt1= LocalDateTime.ofInstant(startDate.toInstant(),ZoneId.of("+8"));LocalDateTime ldt2= LocalDateTime.ofInstant(endDate.toInstant(),ZoneId.of("+8"));switch (unit){case 1:{LocalDateTime start= ldt1.with(ChronoField.SECOND_OF_DAY,0);LocalDateTime end= ldt1.with(ChronoField.SECOND_OF_DAY, ChronoUnit.DAYS.getDuration().getSeconds()-1);while(true){returnList.add(new Date[]{Date.from(start.toInstant(ZoneOffset.of("+8"))),Date.from(end.toInstant(ZoneOffset.of("+8")))});if(!ldt2.isBefore(start)&&!ldt2.isAfter(end)){break;}else{start=start.plusDays(1);end=end.plusDays(1);}}break;}case 2:{int dayOfWeek=ldt1.get(ChronoField.DAY_OF_WEEK);LocalDateTime start= ldt1.plusDays(1-dayOfWeek).with(ChronoField.SECOND_OF_DAY,0);LocalDateTime end= ldt1.plusDays(7-dayOfWeek).with(ChronoField.SECOND_OF_DAY, ChronoUnit.DAYS.getDuration().getSeconds()-1); while(true){returnList.add(new Date[]{Date.from(start.toInstant(ZoneOffset.of("+8"))),Date.from(end.toInstant(ZoneOffset.of("+8")))});if(!ldt2.isBefore(start)&&!ldt2.isAfter(end)){break;}else{start=start.plusWeeks(1);end=end.plusWeeks(1);}}if(returnList.size()>0){Date[] firstEle=returnList.get(0);Date[] lastEle=returnList.get(returnList.size()-1);firstEle[0]=Date.from(ldt1.with(ChronoField.SECOND_OF_DAY,0).toInstant(ZoneOffset.of("+8")));lastEle[1]=Date.from(ldt2.with(ChronoField.SECOND_OF_DAY,0).toInstant(ZoneOffset.of("+8")));}break;}case 3:{LocalDateTime temp=ldt1;while(true) {int dayOfMonth = temp.get(ChronoField.DAY_OF_MONTH);int max = temp.getMonth().maxLength();LocalDateTime start = temp.plusDays(1 - dayOfMonth).with(ChronoField.SECOND_OF_DAY, 0);LocalDateTime end = temp.plusDays(max - dayOfMonth).with(ChronoField.SECOND_OF_DAY, ChronoUnit.DAYS.getDuration().getSeconds() - 1); returnList.add(new Date[]{Date.from(start.toInstant(ZoneOffset.of("+8"))),Date.from(end.toInstant(ZoneOffset.of("+8")))});if(!ldt2.isBefore(start)&&!ldt2.isAfter(end)){break;}else{temp=temp.plusMonths(1);}}if(returnList.size()>0){Date[] firstEle=returnList.get(0);Date[] lastEle=returnList.get(returnList.size()-1);firstEle[0]=Date.from(ldt1.with(ChronoField.SECOND_OF_DAY,0).toInstant(ZoneOffset.of("+8")));lastEle[1]=Date.from(ldt2.with(ChronoField.SECOND_OF_DAY,0).toInstant(ZoneOffset.of("+8")));}break;}}return returnList;}/*** 计算两个时间相差多少⽇期单位(不⾜⼀个⽇期单位的的按⼀个⽇期单位算)** @param d1 开始时间* @param d2 结束时间* @return 相差⽇期单位数*/public static int getDiff(Date d1, Date d2, int calendarUnit) {double diff;switch (calendarUnit) {case Calendar.DATE: {diff = 1000 * 60 * 60 * 24;break;}case Calendar.HOUR_OF_DAY: {diff = 1000 * 60 * 60;break;}case Calendar.MINUTE: {diff = 1000 * 60;break;}case Calendar.SECOND: {diff = 1000;break;}default: {throw BaseRuntimeException.getException("[DateUtil.getDiff],Calendar Unit Not Support!");}}Long begin = d1.getTime();Long end = d2.getTime();Double res = (end - begin) / diff;return (int) Math.ceil(res);}/*** 会改变参数值* 格式化⽇期参数开始⽇期和结束⽇期* 格式规则为:* 开始⽇期去掉时分秒* 结束⽇期设置为当天 23:59:59** @param startDate* @param endDate*/public static void formatDateParam(Date startDate, Date endDate) {if (startDate != null) {startDate.setTime(getFloorDate(startDate, Calendar.DATE).getTime());}if (endDate != null) {Date tempDate = getCeilDate(endDate, Calendar.DATE);Calendar endC = Calendar.getInstance();endC.setTime(tempDate);endC.add(Calendar.SECOND, -1);endDate.setTime(endC.getTimeInMillis());}}/*** 获取⼀个⽇期的数字表⽰形式* 例如:* 2018-3-12 15:13:12 888 表⽰成 20180312151312888** @param date* @param calendarUnit 最⼩的⽇期单位* @return*/public static Long getDateNum(Date date, int calendarUnit) {if (date == null) {return null;}StringBuffer sb = new StringBuffer();Calendar c = Calendar.getInstance();c.setTime(date);if (calendarUnit >= Calendar.YEAR) {sb.append(c.get(Calendar.YEAR));}if (calendarUnit >= Calendar.MONTH) {sb.append(FormatUtil.formatToString(c.get(Calendar.MONTH) + 1, "00"));}if (calendarUnit >= Calendar.DATE) {sb.append(FormatUtil.formatToString(c.get(Calendar.DATE), "00"));}if (calendarUnit >= Calendar.HOUR_OF_DAY) {sb.append(FormatUtil.formatToString(c.get(Calendar.HOUR_OF_DAY), "00")); }if (calendarUnit >= Calendar.MINUTE) {sb.append(FormatUtil.formatToString(c.get(Calendar.MINUTE), "00"));}if (calendarUnit >= Calendar.SECOND) {sb.append(FormatUtil.formatToString(c.get(Calendar.SECOND), "00"));}if (calendarUnit >= LISECOND) {sb.append(FormatUtil.formatToString(c.get(LISECOND), "000")); }return Long.parseLong(sb.toString());}/*** 判断两个⽇期是否相等** @param d1* @param d2* @param calendarUnit 对⽐的最⼩⽇期单位* @return*/public static boolean isEqual(Date d1, Date d2, int calendarUnit) {Calendar c1 = Calendar.getInstance();Calendar c2 = Calendar.getInstance();c1.setTime(d1);c2.setTime(d2);for (int i = DATE_UNIT_ARR.length - 1; i >= 0; i--) {if (calendarUnit >= DATE_UNIT_ARR[i]) {int v1 = c1.get(DATE_UNIT_ARR[i]);int v2 = c2.get(DATE_UNIT_ARR[i]);if (v1 != v2) {return false;}} else {break;}}return true;}/*** 获取当天初始时间** @param date 时间* @return 初始时间 (yyyy-MM-dd 00:00:00)*/public static Date getInitialTime(Date date) {DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd 00:00:00"); String dateStr = dateFormat.format(date);try {return dateFormat.parse(dateStr);} catch (ParseException e) {e.printStackTrace();}return null;}/*** 获取当天最后时间** @param date 时间* @return 最后时间 (yyyy-MM-dd 23:59:59)*/public static Date getTerminalTime(Date date) {DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");String dateStr = dateFormat.format(date);dateStr = dateStr + " 23:59:59";dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");try {return dateFormat.parse(dateStr);} catch (ParseException e) {e.printStackTrace();}return null;}public static String date2Str(Date date) {DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); return dateFormat.format(date);}/*** 计算两个时间间隔多少秒** @param startDate* @param endDate* @return*/public static Long intervalTime(Date startDate, Date endDate) {long a = endDate.getTime();long b = startDate.getTime();Long c = ((a - b) / 1000);return c;}/*** 检测⼀个⽇期是否在⼩时之内,⽀持跨天的⼩时** @param time* @param startDate* @param endDate* @return*/public static boolean checkDateIn(Date time, Date startDate, Date endDate) { if (startDate == null || endDate == null || time == null) {return true;}return time.before(endDate) && time.after(startDate);}/*** 检测⼀个⽇期是否在时分秒之内,⽀持跨天的⼩时** @param time* @param startHms* @param endHms* @return*/public static boolean checkHmsIn(Date time, String startHms, String endHms) {if (startHms == null || endHms == null || time == null) {return true;}LocalTime startTime = LocalTime.of(Integer.valueOf(startHms.substring(0, 2)),Integer.valueOf(startHms.substring(2, 4)),Integer.valueOf(startHms.substring(4, 6)));LocalTime endTime = LocalTime.of(Integer.valueOf(endHms.substring(0, 2)),Integer.valueOf(endHms.substring(2, 4)),Integer.valueOf(endHms.substring(4, 6)));LocalTime curTime = LocalDateTime.ofInstant(time.toInstant(), ZoneId.of("+8")).toLocalTime();if (endTime.isAfter(startTime)) {return startTime.isBefore(curTime) && endTime.isAfter(curTime);} else {return (startTime.isBefore(curTime) && LocalTime.MAX.isAfter(curTime)) || (LocalTime.MIN.isBefore(curTime) && endTime.isAfter(curTime)); }}/*** 功能描述:格式化⽇期** @param dateStr 字符型⽇期:YYYY/MM/DD 格式* @return Date ⽇期*/public static Date parseDate(String dateStr) {return parseDate(dateStr, "yyyy-MM-dd");}/*** 功能描述:格式化⽇期** @param dateStr 字符型⽇期* @param format 格式* @return Date ⽇期*/public static Date parseDate(String dateStr, String format) {try {dateFormat = new SimpleDateFormat(format);String dt = dateStr.replaceAll("-", "/");if ((!dt.equals("")) && (dt.length() < format.length())) {dt += format.substring(dt.length()).replaceAll("[YyMmDdHhSs]","0");}date = (Date) dateFormat.parse(dt);} catch (Exception e) {return null;}return date;}public static Date stringParseDate(String date) throws ParseException {//获取的值为"19570323"//1、定义转换格式SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");SimpleDateFormat formatter2 = new SimpleDateFormat("yyyyMMdd");//2、调⽤formatter2.parse(),将"19570323"转化为date类型输出为:Sat Mar 23 00:00:00 GMT+08:00 1957Date parseDate = formatter2.parse(date);return parseDate;}}PS:这⾥再为⼤家推荐⼏款关于⽇期与时间计算的在线⼯具供⼤家参考使⽤:更多关于java相关内容感兴趣的读者可查看本站专题:《》、《》、《》和《》希望本⽂所述对⼤家java程序设计有所帮助。
java常见的时间⼯具类-DateUtils package mon.util;import java.text.DecimalFormat;import java.text.ParseException;import java.text.SimpleDateFormat;import java.util.Calendar;import java.util.Date;import ng3.time.DateFormatUtils;public class DateUtils {/*** 仅显⽰年⽉⽇,例如 2015-08-11.*/public static final String DATE_FORMAT = "yyyy-MM-dd";/*** 显⽰年⽉⽇时分秒,例如 2015-08-11 09:51:53.*/public static final String DATETIME_FORMAT = "yyyy-MM-dd HH:mm:ss";/*** 仅显⽰时分秒,例如 09:51:53.*/public static final String TIME_FORMAT = "HH:mm:ss";/*** 每天的毫秒数 8640000.*/public static final long MILLISECONDS_PER_DAY = 86400000L;/*** 每周的天数.*/public static final long DAYS_PER_WEEK = 7L;/*** 每⼩时毫秒数.*/public static final long MILLISECONDS_PER_HOUR = 3600000L;/*** 每分钟秒数.*/public static final long SECONDS_PER_MINUTE = 60L;/*** 每⼩时秒数.*/public static final long SECONDS_PER_HOUR = 3600L;/*** 每天秒数.*/public static final long SECONDS_PER_DAY = 86400L;/*** 每个⽉秒数,默认每⽉30天.*/public static final long SECONDS_PER_MONTH = 2592000L;/*** 每年秒数,默认每年365天.*/public static final long SECONDS_PER_YEAR = 31536000L;/*** 常⽤的时间格式.*/private static String[] parsePatterns = { "yyyy-MM-dd", "yyyy-MM-dd HH:mm:ss", "yyyy-MM-dd HH:mm", "yyyy/MM/dd","yyyy/MM/dd HH:mm:ss", "yyyy/MM/dd HH:mm" };/*** 得到当前⽇期字符串.* @return String ⽇期字符串,例如2015-08-11* @since 1.0*/public static String getDate() {return getDate(DateUtils.DATE_FORMAT);}public static String getTime() {return formatDate(new Date(), DateUtils.TIME_FORMAT);}/*** 得到当前⽇期和时间字符串.* @return String ⽇期和时间字符串,例如 2015-08-11 09:51:53* @since 1.0*/public static String getDateTime() {return formatDate(new Date(), DateUtils.DATETIME_FORMAT);}/*** 获取当前时间指定格式下的字符串.* @param pattern* 转化后时间展⽰的格式,例如"yyyy-MM-dd","yyyy-MM-dd HH:mm:ss"等 * @return String 格式转换之后的时间字符串.* @since 1.0*/public static String getDate(String pattern) {return DateFormatUtils.format(new Date(), pattern);}/*** 获取指定⽇期的字符串格式.* @param date 需要格式化的时间,不能为空* @param pattern 时间格式,例如"yyyy-MM-dd","yyyy-MM-dd HH:mm:ss"等* @return String 格式转换之后的时间字符串.* @since 1.0*/public static String getDate(Date date, String pattern) {return DateFormatUtils.format(date, pattern);}/*** 获取⽇期时间字符串,默认格式为(yyyy-MM-dd).* @param date 需要转化的⽇期时间* @param pattern 时间格式,例如"yyyy-MM-dd" "HH:mm:ss" "E"等* @return String 格式转换后的时间字符串* @since 1.0*/public static String formatDate(Date date, Object... pattern) {String formatDate = null;if (pattern != null && pattern.length > 0) {formatDate = DateFormatUtils.format(date, pattern[0].toString());} else {formatDate = DateFormatUtils.format(date, DateUtils.DATE_FORMAT);}return formatDate;}/*** 获取当前年份字符串.* @return String 当前年份字符串,例如 2015* @since 1.0*/public static String getYear() {return formatDate(new Date(), "yyyy");}/*** 获取当前⽉份字符串.* @return String 当前⽉份字符串,例如 08* @since 1.0*/public static String getMonth() {return formatDate(new Date(), "MM");}/*** 获取当前天数字符串.* @return String 当前天数字符串,例如 11* @since 1.0*/public static String getDay() {return formatDate(new Date(), "dd");}public static String getWeek() {return formatDate(new Date(), "E");}/*** 将⽇期型字符串转换为⽇期格式.* ⽀持的⽇期字符串格式包括"yyyy-MM-dd","yyyy-MM-dd HH:mm:ss", "yyyy-MM-dd HH:mm",* "yyyy/MM/dd", "yyyy/MM/dd HH:mm:ss", "yyyy/MM/dd HH:mm"* @param str* @return Date* @since 1.0*/public static Date parseDate(Object str) {if (str == null) {return null;}try {return ng3.time.DateUtils.parseDate(str.toString(), parsePatterns);} catch (ParseException e) {return null;}}/*** 获取当前⽇期与指定⽇期相隔的天数.* @param date 给定的⽇期* @return long ⽇期间隔天数,正数表⽰给定⽇期在当前⽇期之前,负数表⽰在当前⽇期之后* @since 1.0*/public static long pastDays(Date date) {// 将指定⽇期转换为yyyy-MM-dd格式date = DateUtils.parseDate(DateUtils.formatDate(date, DateUtils.DATE_FORMAT));// 当前⽇期转换为yyyy-MM-dd格式Date currentDate = DateUtils.parseDate(DateUtils.formatDate(new Date(), DateUtils.DATE_FORMAT)); long t=0;if(date!=null&¤tDate!=null){t = (currentDate.getTime() - date.getTime()) / LISECONDS_PER_DAY;}return t;}/*** 获取当前⽇期指定天数之后的⽇期.* @param num 相隔天数* @return Date ⽇期* @since 1.0*/public static Date nextDay(int num) {Calendar curr = Calendar.getInstance();curr.set(Calendar.DAY_OF_MONTH, curr.get(Calendar.DAY_OF_MONTH) + num);return curr.getTime();}/*** 获取当前⽇期指定⽉数之后的⽇期.* @param num 间隔⽉数* @return Date ⽇期* @since 1.0*/public static Date nextMonth(int num) {Calendar curr = Calendar.getInstance();curr.set(Calendar.MONTH, curr.get(Calendar.MONTH) + num);return curr.getTime();}/*** 获取当前⽇期指定年数之后的⽇期.* @param num 间隔年数* @return Date ⽇期* @since 1.0*/public static Date nextYear(int num) {Calendar curr = Calendar.getInstance();curr.set(Calendar.YEAR, curr.get(Calendar.YEAR) + num);return curr.getTime();}/*** 将 Date ⽇期转化为 Calendar 类型⽇期.* @return Calendar Calendar对象* @since 1.0*/public static Calendar getCalendar(Date date) {Calendar calendar = Calendar.getInstance();// calendar.setFirstDayOfWeek(Calendar.SUNDAY);//每周从周⽇开始// calendar.setMinimalDaysInFirstWeek(1); // 设置每周最少为1天if (date != null) {calendar.setTime(date);}return calendar;}/*** 计算两个⽇期之间相差天数.* @param start 计算开始⽇期* @param end 计算结束⽇期* @return long 相隔天数* @since 1.0*/public static long getDaysBetween(Date start, Date end) {// 将指定⽇期转换为yyyy-MM-dd格式start = DateUtils.parseDate(DateUtils.formatDate(start, DateUtils.DATE_FORMAT));// 当前⽇期转换为yyyy-MM-dd格式end = DateUtils.parseDate(DateUtils.formatDate(end, DateUtils.DATE_FORMAT));long diff=0;if(start!=null&&end!=null) {diff = (end.getTime() - start.getTime()) / LISECONDS_PER_DAY;}return diff;}/*** 计算两个⽇期之前相隔多少周.* @param start 计算开始时间* @param end 计算结束时间* @return long 相隔周数,向下取整* @since 1.0*/public static long getWeeksBetween(Date start, Date end) {return getDaysBetween(start, end) / DateUtils.DAYS_PER_WEEK;}/*** 获取与指定⽇期间隔给定天数的⽇期.* @param specifiedDay 给定的字符串格式⽇期,⽀持的⽇期字符串格式包括"yyyy-MM-dd","yyyy-MM-dd HH:mm:ss", * "yyyy-MM-dd HH:mm", "yyyy/MM/dd", "yyyy/MM/dd HH:mm:ss",* "yyyy/MM/dd HH:mm"* @param num 间隔天数* @return String 间隔指定天数之后的⽇期* @since 1.0*/public static String getSpecifiedDayAfter(String specifiedDay, int num) {Date specifiedDate = parseDate(specifiedDay);Calendar c = Calendar.getInstance();c.setTime(specifiedDate);int day = c.get(Calendar.DATE);c.set(Calendar.DATE, day + num);String dayAfter = formatDate(c.getTime(), DateUtils.DATE_FORMAT);return dayAfter;}/*** 计算两个⽇期之前间隔的⼩时数.** @param date1* 结束时间* @param date2* 开始时间* @return String 相差的⼩时数,保留⼀位⼩数* @since 1.0*/public static String dateMinus(Date date1, Date date2) {if (date1 == null || date2 == null) {return "0";}Long r = date1.getTime() - date2.getTime();DecimalFormat df = new DecimalFormat("#.0");double result = r * 1.0 / LISECONDS_PER_HOUR;return df.format(result);}* 获取当前季度 .** @return Integer 当前季度数* @since 1.0*/public static Integer getCurrentSeason() {Calendar calendar = Calendar.getInstance();Integer month = calendar.get(Calendar.MONTH) + 1;int season = 0;if (month >= 1 && month <= 3) {season = 1;} else if (month >= 4 && month <= 6) {season = 2;} else if (month >= 7 && month <= 9) {season = 3;} else if (month >= 10 && month <= 12) {season = 4;}return season;}/*** 将以秒为单位的时间转换为其他单位.** @param seconds* 秒数* @return String 例如 16分钟前、2⼩时前、3天前、4⽉前、5年前等* @since 1.0*/public static String getIntervalBySeconds(long seconds) {StringBuffer buffer = new StringBuffer();if (seconds < SECONDS_PER_MINUTE) {buffer.append(seconds).append("秒前");} else if (seconds < SECONDS_PER_HOUR) {buffer.append(seconds / SECONDS_PER_MINUTE).append("分钟前");} else if (seconds < SECONDS_PER_DAY) {buffer.append(seconds / SECONDS_PER_HOUR).append("⼩时前");} else if (seconds < SECONDS_PER_MONTH) {buffer.append(seconds / SECONDS_PER_DAY).append("天前");} else if (seconds < SECONDS_PER_YEAR) {buffer.append(seconds / SECONDS_PER_MONTH).append("⽉前");} else {buffer.append(seconds / DateUtils.SECONDS_PER_YEAR).append("年前"); }return buffer.toString();}/**** getNowTimeBefore(记录时间相当于⽬前多久之前)** @param seconds* 秒* @return* @exception @since* 1.0* @author rlliu*/public static String getNowTimeBefore(long seconds) {StringBuffer buffer = new StringBuffer();buffer.append("上传于");if (seconds < 3600) {buffer.append((long) Math.floor(seconds / 60.0)).append("分钟前");} else if (seconds < 86400) {buffer.append((long) Math.floor(seconds / 3600.0)).append("⼩时前");} else if (seconds < 604800) {buffer.append((long) Math.floor(seconds / 86400.0)).append("天前");} else if (seconds < 2592000) {buffer.append((long) Math.floor(seconds / 604800.0)).append("周前");} else if (seconds < 31104000) {buffer.append((long) Math.floor(seconds / 2592000.0)).append("⽉前");} else {buffer.append((long) Math.floor(seconds / 31104000.0)).append("年前");}return buffer.toString();}/**** getMonthsBetween(查询两个⽇期相隔的⽉份)** @param startDate 开始⽇期1 (格式yyyy-MM-dd)* @param endDate 截⽌⽇期2 (格式yyyy-MM-dd)public static int getMonthsBetween(String startDate, String endDate) {Calendar c1 = Calendar.getInstance();Calendar c2 = Calendar.getInstance();c1.setTime(DateUtils.parseDate(startDate));c2.setTime(DateUtils.parseDate(endDate));int year = c2.get(Calendar.YEAR) - c1.get(Calendar.YEAR);int month = c2.get(Calendar.MONTH) - c1.get(Calendar.MONTH);return Math.abs(year * 12 + month);}/**** getDayOfWeek(获取当前⽇期是星期⼏)** @param dateStr ⽇期* @return 星期⼏*/public static String getDayOfWeek(String dateStr) {String[] weekOfDays = { "星期⽇", "星期⼀", "星期⼆", "星期三", "星期四", "星期五", "星期六" };Date date = parseDate(dateStr);Calendar calendar = Calendar.getInstance();calendar.setTime(date);int num = calendar.get(Calendar.DAY_OF_WEEK) - 1;return weekOfDays[num];}/*** sns 格式如⼏秒前,⼏分钟前,⼏⼩时前,⼏天前,⼏个⽉前,⼏年后, ... 精细,类如某个明星⼏秒钟之前发表了⼀篇微博 ** @param createTime* @return*/public static String snsFormat(long createTime) {long now = System.currentTimeMillis() / 1000;long differ = now - createTime / 1000;String dateStr = "";if (differ <= 60) {dateStr = "刚刚";} else if (differ <= 3600) {dateStr = (differ / 60) + "分钟前";} else if (differ <= 3600 * 24) {dateStr = (differ / 3600) + "⼩时前";} else if (differ <= 3600 * 24 * 30) {dateStr = (differ / (3600 * 24)) + "天前";} else {Date date = new Date(createTime);SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");dateStr = sdf.format(date);}return dateStr;}/*** 得到UTC时间,类型为字符串,格式为"yyyy-MM-dd HH:mm"* 如果获取失败,返回null* @return*/public static String getUTCTimeStr() {StringBuffer UTCTimeBuffer = new StringBuffer();// 1、取得本地时间:Calendar cal = Calendar.getInstance() ;// 2、取得时间偏移量:int zoneOffset = cal.get(java.util.Calendar.ZONE_OFFSET);// 3、取得夏令时差:int dstOffset = cal.get(java.util.Calendar.DST_OFFSET);// 4、从本地时间⾥扣除这些差量,即可以取得UTC时间:cal.add(LISECOND, -(zoneOffset + dstOffset));int year = cal.get(Calendar.YEAR);int month = cal.get(Calendar.MONTH)+1;int day = cal.get(Calendar.DAY_OF_MONTH);int hour = cal.get(Calendar.HOUR_OF_DAY);int minute = cal.get(Calendar.MINUTE);UTCTimeBuffer.append(year).append("-").append(month).append("-").append(day) ;UTCTimeBuffer.append(" ").append(hour).append(":").append(minute) ;try{SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm");sdf.parse(UTCTimeBuffer.toString()) ;return UTCTimeBuffer.toString() ;}catch(ParseException e){e.printStackTrace() ;}}。
Java⽇期时间⼯具包–java.time的使⽤⽬录⽇期和时间now()of()plus()minus()时区格式化从JDK8开始,Java 提供了新的⽇期时间处理⽅法⽤来代替旧的⽇期类(Date)。
本章主要讲它们的⽤法以及和旧⽇期类互转。
⽇期和时间Java 新的⽇期⼯具类在 java.time 包及⼦包中,⽇期类主要有 LocalDateTime、LocalDate、LocalTime ,这三个API类很相似,以下是常⽤API及说明。
now()静态⽅法,获取当前时间⽇期。
⽰例:LocalDateTime.now()of()静态⽅法,指定⽇期时间⽣成LoalDateTime。
⽰例:LocalDateTime.of(2020, 2, 9, 8, 0, 0)。
如果是LocalDate,则只能指定年⽉⽇。
如果是LocalTime则只能指定时分秒。
plus()在当前时间的基础上增加时间并返回新的LocalDateTime,不会改变原来时间。
⼀般使⽤以下⽅法处理更简单:⽅法说明备注plusYears(1)增加1年LocalTime⽆此⽅法plusMonths(1)增加1个⽉LocalTime⽆此⽅法plusWeeks(1)增加1周LocalTime⽆此⽅法plusDays(1)增加1天LocalTime⽆此⽅法plusHours(1)增加1⼩时LocalDate⽆此⽅法plusMinutes(1)增加1分钟LocalDate⽆此⽅法plusSeconds(1)增加1秒LocalDate⽆此⽅法minus()在当前时间的基础上减去时间并返回新的LocalDateTime,不会改变原来时间。
⼀般使⽤以下⽅法处理更简单:⽅法说明备注minusYears(1)减少1年LocalTime⽆此⽅法minusMonths(1)减少1个⽉LocalTime⽆此⽅法minusWeeks(1)减少1周LocalTime⽆此⽅法minusDays(1)减少1天LocalTime⽆此⽅法minusHours(1)减少1⼩时LocalDate⽆此⽅法minusMinutes(1)减少1分钟LocalDate⽆此⽅法minusSeconds(1)减少1秒LocalDate⽆此⽅法从上⾯⼏个⽰例可以看到这三个类的区别,LocalDate不能处理时间,LocalTime不能处理⽇期,LocalDateTime是LocalDate 和LocalTime的集合。
⽇期⼯具类-DateUtil.java ⽇期⼯具类,提供对⽇期的格式化和转换⽅法、获取区间⽇期、指定⽇期、每⽉最后⼀天等。
源码如下:(点击下载 -、 )import java.text.DateFormat;import java.text.ParseException;import java.text.SimpleDateFormat;import java.util.ArrayList;import java.util.Calendar;import java.util.Date;import java.util.GregorianCalendar;import java.util.List;import ng.StringUtils;/*** ⽇期⼯具类**/public class DateUtil {// 默认⽇期格式public static final String DATE_DEFAULT_FORMAT = "yyyy-MM-dd";// 默认时间格式public static final String DATETIME_DEFAULT_FORMAT = "yyyy-MM-dd HH:mm:ss";public static final String TIME_DEFAULT_FORMAT = "HH:mm:ss";// ⽇期格式化private static DateFormat dateFormat = null;// 时间格式化private static DateFormat dateTimeFormat = null;private static DateFormat timeFormat = null;private static Calendar gregorianCalendar = null;static {dateFormat = new SimpleDateFormat(DATE_DEFAULT_FORMAT);dateTimeFormat = new SimpleDateFormat(DATETIME_DEFAULT_FORMAT);timeFormat = new SimpleDateFormat(TIME_DEFAULT_FORMAT);gregorianCalendar = new GregorianCalendar();}/*** ⽇期格式化yyyy-MM-dd** @param date* @return*/public static Date formatDate(String date, String format) {try {return new SimpleDateFormat(format).parse(date);} catch (ParseException e) {e.printStackTrace();}return null;}/*** ⽇期格式化yyyy-MM-dd** @param date* @return*/public static String getDateFormat(Date date) {return dateFormat.format(date);}/*** ⽇期格式化yyyy-MM-dd HH:mm:ss** @param date* @return*/public static String getDateTimeFormat(Date date) {return dateTimeFormat.format(date);}/*** 时间格式化** @param date* @return HH:mm:ss*/public static String getTimeFormat(Date date) {return timeFormat.format(date);}/*** ⽇期格式化** @param date* @param格式类型* @return*/public static String getDateFormat(Date date, String formatStr) {if (StringUtils.isNotBlank(formatStr)) {return new SimpleDateFormat(formatStr).format(date);}return null;}/*** ⽇期格式化** @param date* @return*/public static Date getDateFormat(String date) {try {return dateFormat.parse(date);} catch (ParseException e) {e.printStackTrace();}return null;}/*** 时间格式化** @param date* @return*/public static Date getDateTimeFormat(String date) {try {return dateTimeFormat.parse(date);} catch (ParseException e) {e.printStackTrace();}return null;}/*** 获取当前⽇期(yyyy-MM-dd)** @param date* @return*/public static Date getNowDate() {return DateUtil.getDateFormat(dateFormat.format(new Date()));}/*** 获取当前⽇期星期⼀⽇期** @return date*/public static Date getFirstDayOfWeek() {gregorianCalendar.setFirstDayOfWeek(Calendar.MONDAY);gregorianCalendar.setTime(new Date());gregorianCalendar.set(Calendar.DAY_OF_WEEK, gregorianCalendar.getFirstDayOfWeek()); // Monday return gregorianCalendar.getTime();}/*** 获取当前⽇期星期⽇⽇期** @return date*/public static Date getLastDayOfWeek() {gregorianCalendar.setFirstDayOfWeek(Calendar.MONDAY);gregorianCalendar.setTime(new Date());gregorianCalendar.set(Calendar.DAY_OF_WEEK, gregorianCalendar.getFirstDayOfWeek() + 6); // Monday return gregorianCalendar.getTime();}/*** 获取⽇期星期⼀⽇期** @param指定⽇期* @return date*/public static Date getFirstDayOfWeek(Date date) {if (date == null) {return null;}gregorianCalendar.setFirstDayOfWeek(Calendar.MONDAY);gregorianCalendar.setTime(date);gregorianCalendar.set(Calendar.DAY_OF_WEEK, gregorianCalendar.getFirstDayOfWeek()); // Monday return gregorianCalendar.getTime();}/*** 获取⽇期星期⼀⽇期** @param指定⽇期* @return date*/public static Date getLastDayOfWeek(Date date) {if (date == null) {return null;}gregorianCalendar.setFirstDayOfWeek(Calendar.MONDAY);gregorianCalendar.setTime(date);gregorianCalendar.set(Calendar.DAY_OF_WEEK, gregorianCalendar.getFirstDayOfWeek() + 6); // Monday return gregorianCalendar.getTime();}/*** 获取当前⽉的第⼀天** @return date*/public static Date getFirstDayOfMonth() {gregorianCalendar.setTime(new Date());gregorianCalendar.set(Calendar.DAY_OF_MONTH, 1);return gregorianCalendar.getTime();}/*** 获取当前⽉的最后⼀天** @return*/public static Date getLastDayOfMonth() {gregorianCalendar.setTime(new Date());gregorianCalendar.set(Calendar.DAY_OF_MONTH, 1);gregorianCalendar.add(Calendar.MONTH, 1);gregorianCalendar.add(Calendar.DAY_OF_MONTH, -1);return gregorianCalendar.getTime();}/*** 获取指定⽉的第⼀天** @param date* @return*/public static Date getFirstDayOfMonth(Date date) {gregorianCalendar.setTime(date);gregorianCalendar.set(Calendar.DAY_OF_MONTH, 1);return gregorianCalendar.getTime();}/*** 获取指定⽉的最后⼀天** @param date* @return*/public static Date getLastDayOfMonth(Date date) {gregorianCalendar.setTime(date);gregorianCalendar.set(Calendar.DAY_OF_MONTH, 1);gregorianCalendar.add(Calendar.MONTH, 1);gregorianCalendar.add(Calendar.DAY_OF_MONTH, -1);return gregorianCalendar.getTime();}/*** 获取⽇期前⼀天** @param date* @return*/public static Date getDayBefore(Date date) {gregorianCalendar.setTime(date);int day = gregorianCalendar.get(Calendar.DATE);gregorianCalendar.set(Calendar.DATE, day - 1);return gregorianCalendar.getTime();}/*** 获取⽇期后⼀天** @param date* @return*/public static Date getDayAfter(Date date) {gregorianCalendar.setTime(date);int day = gregorianCalendar.get(Calendar.DATE);gregorianCalendar.set(Calendar.DATE, day + 1);return gregorianCalendar.getTime();}/*** 获取当前年** @return*/public static int getNowYear() {Calendar d = Calendar.getInstance();return d.get(Calendar.YEAR);}/*** 获取当前⽉份** @return*/public static int getNowMonth() {Calendar d = Calendar.getInstance();return d.get(Calendar.MONTH) + 1;}/*** 获取当⽉天数** @return*/public static int getNowMonthDay() {Calendar d = Calendar.getInstance();return d.getActualMaximum(Calendar.DATE);}/*** 获取时间段的每⼀天** @param开始⽇期* @param结算⽇期* @return⽇期列表*/public static List<Date> getEveryDay(Date startDate, Date endDate) {if (startDate == null || endDate == null) {return null;}// 格式化⽇期(yy-MM-dd)startDate = DateUtil.getDateFormat(DateUtil.getDateFormat(startDate)); endDate = DateUtil.getDateFormat(DateUtil.getDateFormat(endDate)); List<Date> dates = new ArrayList<Date>();gregorianCalendar.setTime(startDate);dates.add(gregorianCalendar.getTime());while (gregorianCalendar.getTime().compareTo(endDate) < 0) {// 加1天gregorianCalendar.add(Calendar.DAY_OF_MONTH, 1);dates.add(gregorianCalendar.getTime());}return dates;}/*** 获取提前多少个⽉** @param monty* @return*/public static Date getFirstMonth(int monty) { Calendar c = Calendar.getInstance();c.add(Calendar.MONTH, -monty);return c.getTime();}}。
多年的项目积累。
这里共享一下。
/** @(#) 所有版权归聚灵工作室所有.** $Id$** ===================================* Electric Operation Maintenance System(EOMS)** Copyright (c) 2006 by INSPUR LG, Inc.* All rights reserved.*/package com.work.util;import java.io.Serializable;import java.text.ParseException;import java.text.ParsePosition;import java.text.SimpleDateFormat;import java.util.Calendar;import java.util.Date;import java.util.GregorianCalendar;import java.util.TimeZone;/*** 日期操作工具类,主要实现了日期的常用操作。
* <p>* 在工具类中经常使用到工具类的格式化描述,这个主要是一个日期的操作类,所以日志格式主要使用SimpleDateFormat的定义格式.* <p>* 格式的意义如下:日期和时间模式<br>* 日期和时间格式由日期和时间模式字符串指定。
在日期和时间模式字符串中,未加引号的字母'A' 到'Z' 和'a' 到'z'* 被解释为模式字母,用来表示日期或时间字符串元素。
文本可以使用单引号(') 引起来,以免进行解释。
"''"* 表示单引号。
所有其他字符均不解释;只是在格式化时将它们简单复制到输出字符串,或者在分析时与输入字符串进行匹配。
* <p>* 定义了以下模式字母(所有其他字符'A' 到'Z' 和'a' 到'z' 都被保留):<br>* <table>* <tr>* <td>字母</td>* <td>日期或时间元素</td>* <td>表示</td>* <td></tr>* <tr>* <td>G</td>* <td>Era</td>* <td>标志符</td>* <td>Text</td>* <td>AD</td>* <td></tr>* <tr>* <td>y</td>* <td>年</td>* <td>Year</td>* <td>1996;</td>* <td>96</td>* <td></tr>* <tr>* <td>M</td>* <td>年中的月份</td> * <td>Month</td>* <td>July;</td>* <td>Jul;</td>* <td>07</tr>* <tr>* <td>w</td>* <td>年中的周数</td> * <td>Number</td>* <td>27</td>* <td></tr>* <tr>* <td>W</td>* <td>月份中的周数</td> * <td>Number</td>* <td>2</td>* <td></tr>* <tr>* <td>D</td>* <td>年中的天数</td> * <td>Number</td>* <td>189</td>* <td></tr>* <tr>* <td>d</td>* <td>月份中的天数</td>* <td>10</td>* <td></tr>* <tr>* <td>F</td>* <td>月份中的星期</td>* <td>Number</td>* <td>2</td>* <td></tr>* <tr>* <td>E</td>* <td>星期中的天数</td>* <td>Text</td>* <td>Tuesday;</td>* <td>Tue</tr>* <tr>* <td>a</td>* <td>Am/pm</td>* <td>标记</td>* <td>Text</td>* <td>PM</td>* <td></tr>* <tr>* <td>H</td>* <td>一天中的小时数(0-23)</td> * <td>Number</td>* <td>0</tr>* <tr>* <td>k</td>* <td>一天中的小时数(1-24)</td> * <td>Number</td>* <td>24</td>* <td></tr>* <tr>* <td>K</td>* <td>am/pm</td>* <td>中的小时数(0-11)</td>* <td>Number</td>* <td>0</td>* <td></tr>* <tr>* <td>h</td>* <td>am/pm</td>* <td>中的小时数(1-12)</td>* <td>12</td>* <td></tr>* <tr>* <td>m</td>* <td>小时中的分钟数</td>* <td>Number</td>* <td>30</td>* <td></tr>* <tr>* <td>s</td>* <td>分钟中的秒数</td>* <td>Number</td>* <td>55</td>* <td></tr>* <tr>* <td>S</td>* <td>毫秒数</td>* <td>Number</td>* <td>978</td>* <td></tr>* <tr>* <td>z</td>* <td>时区</td>* <td>General</td>* <td>time</td>* <td>zone</td>* <td>Pacific</td>* <td>Standard</td>* <td>Time;</td>* <td>PST;</td>* <td>GMT-08:00</tr>* <tr>* <td>Z</td>* <td>时区</td>* <td>RFC</td>* <td>822</td>* <td>time</td>* <td>zone</td>* <td>-0800</td>* <td></tr>* </table>** 模式字母通常是重复的,其数量确定其精确表示:**/public final class DateUtil implements Serializable {/****/private static final long serialVersionUID = -3098985139095632110L;private DateUtil() {}/*** 格式化日期显示格式** @param sdate* 原始日期格式s - 表示"yyyy-mm-dd" 形式的日期的String 对象* @param format* 格式化后日期格式* @return 格式化后的日期显示*/public static String dateFormat(String sdate, String format) {SimpleDateFormat formatter = new SimpleDateFormat(format);java.sql.Date date = java.sql.Date.valueOf(sdate);String dateString = formatter.format(date);return dateString;}/*** 求两个日期相差天数** @param sd* 起始日期,格式yyyy-MM-dd* @param ed* 终止日期,格式yyyy-MM-dd* @return 两个日期相差天数*/public static long getIntervalDays(String sd, String ed) {return ((java.sql.Date.valueOf(ed)).getTime() - (java.sql.Date.valueOf(sd)).getTime())/ (3600 * 24 * 1000);}/*** 起始年月yyyy-MM与终止月yyyy-MM之间跨度的月数。