前言
java8是jdk版本更新里具有里程碑意义的一个版本。它引入了许多新特性。极大简化了我们的开发工作量,是代码变得更简洁。因此,这里我使用的是java8的日期处理类
正文
格式化输出当前时间
LocalDateTime now = LocalDateTime.now();
DateTimeFormatter formatter=DateTimeFormatter.ofPattern("yyyy/MM/dd HH:mm:ss");
System.out.println(formatter.format(now));
结果如下:2019/07/21 13:38:07
指定时间格式为字符串输出
使用老版本的更为灵活
Object date=new Date();
SimpleDateFormat formatter = new SimpleDateFormat("yyyy/MM/dd");
System.out.println(formatter.format(date));
或者
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date date=formatter.parse("2020-07-20 17:56:56:01");
System.out.println(date.toString());
System.out.println(formatter.format(date));
转换结果如下:
Mon Jul 20 17:56:56 CST 2020
2020-07-20 17:56:56
日期大小的比较
Date date=new Date();
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Object obj="2010-07-20 17:56:56:01";
Date date1=formatter.parse(String.valueOf(obj));
if (date.getTime()<date1.getTime()){
System.out.println("已过期");
}
日期的加减
Date date=new Date();
Calendar cal = Calendar.getInstance();
cal.setTime(date);//设置起时间
cal.add(Calendar.YEAR, 1);//增加一年
减少一月
Date date=new Date();
Calendar cl=Calendar.getInstance();
cl.setTime(date);
cl.add(Calendar.MONTH,-1);
Date date1=cl.getTime();
数据库中如果这样存数据。也是可以访问到的
参考
https://blog.csdn.net/zjc/article/details/78463291
字符转时间
https://blog.csdn.net/u011243684/article/details/81431771
Java 8 新特性:Java 类库的新特性之日期时间API (Date/Time API )
https://blog.csdn.net/sun_promise/article/details/51383618
封装的一个类
package org.dc.commons.utils;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.time.LocalDateTime;
import java.time.LocalTime;
import java.time.ZoneId;
import java.time.format.DateTimeFormatter;
import java.util.Calendar;
import java.util.Date;
/**
* @date 11:38 2019/7/26
* @description: 时间日期工具类
*/
public class DateUtils {
//<editor-fold desc="java.time.LocalDateTime">
//<editor-fold desc="Convert">
/**
* 将指定java.util.Date转换为java.time.LocalDateTime类型
*
* @param date java.util.Date
* @return java.time.LocalDateTime
*/
public static LocalDateTime toLocalDateTime(Date date) {
return LocalDateTime.ofInstant(date.toInstant(), ZoneId.systemDefault());
}
/**
* 将指定java.lang.String转换为java.time.LocalDateTime类型
* <p>
* 默认格式:yyyy-MM-dd HH:mm:ss
*
* @param str java.lang.String
* @return java.time.LocalDateTime
*/
public static LocalDateTime toLocalDateTime(String str) {
return LocalDateTime.parse(str, DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
}
/**
* 将指定java.lang.String转换为java.time.LocalDateTime类型
*
* @param str java.lang.String
* @param pattern 日期格式
* @return java.time.LocalDateTime
*/
public static LocalDateTime toLocalDateTime(String str, String pattern) {
return LocalDateTime.parse(str, DateTimeFormatter.ofPattern(pattern));
}
//</editor-fold>
//</editor-fold>
//<editor-fold desc="java.util.Date">
//<editor-fold desc="Convert">
/**
* 将指定java.time.LocalDateTime转换为java.util.Date类型
*
* @param dateTime java.time.LocalDateTime
* @return java.util.Date
*/
public static Date toDate(LocalDateTime dateTime) {
return Date.from(dateTime.atZone(ZoneId.systemDefault()).toInstant());
}
/**
* 将指定java.lang.String转换为java.util.Date类型
* <p>
* 默认格式:yyyy-MM-dd HH:mm:ss
*
* @param str java.lang.String
* @return java.util.Date
* @throws ParseException 当字符串不能转换为java.time.LocalDateTime时抛出
*/
public static Date toDate(String str) throws ParseException {
return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse(str);
}
/**
* 将指定java.lang.String转换为java.util.Date类型
* <p>
*
* @param str java.lang.String
* @param pattern 日期格式
* @return java.util.Date
* @throws ParseException 当字符串不能转换为java.time.LocalDateTime时抛出
*/
public static Date toDate(String str, String pattern) throws ParseException {
return new SimpleDateFormat(pattern).parse(str);
}
//</editor-fold>
//<editor-fold desc="time difference">
/**
* 比较两个java.util.Date的天数差
* <p/>注:入参不分大小先后
*
* @param firstDate java.util.Date
* @param secondDate java.util.Date
* @return 两个java.util.Date的天数差
*/
public static int getIntervalDays(Date firstDate, Date secondDate) {
return (int) (Math.abs(firstDate.getTime() - secondDate.getTime()) / (1000 * 60 * 60 * 24));
}
/**
* 比较两个java.util.Date的小时差
* <p/>注:入参不分大小先后
*
* @param firstDate java.util.Date
* @param secondDate java.util.Date
* @return 两个java.util.Date的小时差
*/
public static int getIntervalHours(Date firstDate, Date secondDate) {
return (int) (Math.abs(firstDate.getTime() - secondDate.getTime()) / (1000 * 60 * 60));
}
/**
* 比较两个java.util.Date的分钟差
* <p/>注:入参不分大小先后
*
* @param firstDate java.util.Date
* @param secondDate java.util.Date
* @return 两个java.util.Date的分钟差
*/
public static int getIntervalMinutes(Date firstDate, Date secondDate) {
return (int) (Math.abs(firstDate.getTime() - secondDate.getTime()) / (1000 * 60));
}
/**
* 比较两个java.util.Date的秒数差
* <p/>注:入参不分大小先后
*
* @param firstDate java.util.Date
* @param secondDate java.util.Date
* @return 两个java.util.Date的秒数差
*/
public static int getIntervalSeconds(Date firstDate, Date secondDate) {
return (int) (Math.abs(firstDate.getTime() - secondDate.getTime()) / 1000);
}
//</editor-fold>
/**
* 获取指定java.util.Date的开始时间,即时间为:00:00:00
*
* @param date java.util.Date
* @return java.util.Date
*/
public static Date getDayBegin(Date date) {
return toDate(toLocalDateTime(date).with(LocalTime.MIN));
}
/**
* 获取指定java.util.Date的结束时间,即时间为:23:59:59
*
* @param date java.util.Date
* @return java.util.Date
*/
public static Date getDayEnd(Date date) {
return toDate(toLocalDateTime(date).with(LocalTime.MAX));
}
/**
* 获取指定日期所属季度<p/>
* 1: 第一季度<p/>
* 2: 第二季度<p/>
* 3: 第三季度<p/>
* 4: 第四季度<p/>
*
* @param date java.util.Date
* @return int
*/
public static int getQuarter(Date date) {
int season = -1;
Calendar c = Calendar.getInstance();
c.setTime(date);
int month = c.get(Calendar.MONTH);
switch (month) {
case Calendar.JANUARY:
case Calendar.FEBRUARY:
case Calendar.MARCH:
season = 1;
break;
case Calendar.APRIL:
case Calendar.MAY:
case Calendar.JUNE:
season = 2;
break;
case Calendar.JULY:
case Calendar.AUGUST:
case Calendar.SEPTEMBER:
season = 3;
break;
case Calendar.OCTOBER:
case Calendar.NOVEMBER:
case Calendar.DECEMBER:
season = 4;
break;
default:
break;
}
return season;
}
//</editor-fold>
private DateUtils() {
throw new UnsupportedOperationException("Cannot create [" + DateUtils.class.getName() + "] instance.");
}
//<editor-fold desc="Singleton @Deprecated">
// /**
// * DateTimeUtils单例
// *
// * @return instance
// */
// public static DateTimeUtils getInstance() {
// return InstanceEnum.INSTANCE.getInstance();
// }
//
// private DateTimeUtils() { }
//
// private enum InstanceEnum {
// INSTANCE;
//
// private DateTimeUtils instance;
//
// private DateTimeUtils getInstance() {
// return this.instance;
// }
//
// InstanceEnum() {
// this.instance = new DateTimeUtils();
// }
// }
//</editor-fold>
/**
* by lmj
* 获得指定时间的前几年,前几月,前几天的时间
* @param date 起点时间
* @param diffInt 时间差值
* @param oneIsYear_twoIsMonth_sixIsDay 1是年的计算,2是月的计算,6是天的计算(传负数是减法,正数是加法)
* @return
*/
public static Date getAppointLastDate(Date date,int diffInt,int oneIsYear_twoIsMonth_sixIsDay){
Calendar calendar=Calendar.getInstance();
calendar.setTime(date);
calendar.add(oneIsYear_twoIsMonth_sixIsDay,diffInt);
return calendar.getTime();
}
/**
* by lmj
* 默认转时间戳
* @param date
* @return
* @throws ParseException
*/
public static String toString(Date date){
return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(date);
}
/**
* by lmj
* 日期对象转字符串
* @param date 日期对象
* @param pattern 格式化的方式
* "yyyy-MM-dd HH:mm:ss"
* @return
*/
public static String toString(Date date,String pattern){
return new SimpleDateFormat(pattern).format(date);
}
/**
* 获取date中的年月日
*/
public static int getOneYearTwoMonthThreeDay(Date date,int type)throws ParseException{
Calendar c = Calendar.getInstance();
c.setTime(date);
int year1 = c.get(Calendar.YEAR); //获取年
int month1 = c.get(Calendar.MONTH);
int day1=c.get(Calendar.DATE);
if (type==1){
return year1;
}else if (type==2){
return month1+1;
}else {
return day1;
}
}
/**
* 获取本年的开始日期
*/
public static String getYearStart(Date date)throws ParseException{
Calendar c = Calendar.getInstance();
c.setTime(date);
int year1 = c.get(Calendar.YEAR); //获取年
return year1+"-01-01 00:00:00";
}
/**
* 获取本年的结束日期
*/
public static String getYearEnd(Date date)throws ParseException{
Calendar c = Calendar.getInstance();
c.setTime(date);
int year1 = c.get(Calendar.YEAR); //获取年
return year1+"-12-31 23:59:00";
}
/**
* by lmj
* 返回离传入时间最近的季度日期
*/
public static String getQuarterDateString(Date date) throws ParseException {
int month= DateUtils.getOneYearTwoMonthThreeDay(date,2);
if (month>0&&month<=3){
int year=DateUtils.getOneYearTwoMonthThreeDay(date,1)-1;
return year+"-12-31 00:00:00";
}else if(month<=6){
int year=DateUtils.getOneYearTwoMonthThreeDay(date,1);
return year+"-03-31 00:00:00";
}else if (month<=9){
int year=DateUtils.getOneYearTwoMonthThreeDay(date,1);
return year+"-06-30 00:00:00";
}else {
int year = DateUtils.getOneYearTwoMonthThreeDay(date, 1);
return year + "-09-30 00:00:00";
}
}
}