Bootstrap

Java、MySQL 中时间函数的使用

目录

MySQL

DATE_FORMAT(date,format)

DATE_ADD(NOW(),INTERVAL -40 day)

DATE_SUB(NOW(),INTERVAL 40 day)

concat(字符串,拼接内容)

针对此日期格式的各种转换:

Java

Date 类

SimpleDateFormat类   --设置时间格式

Calender类

获得当月第一天

获取当月15号

获取当月最后一天

 判断是否超过3天


MySQL

DATE_FORMAT(date,format)

作用:指定日期格式

date:表示时间字段

format:填入自己需要得到的日期字段,如%Y-%m-%d %H:%i:%s

eg:DATE_FORMAT( now() , '%Y') 结果:22

eg:

SELECT tentant_name,customer_phone,email,DATE_FORMAT( dead_time, '%Y-%m-%d') dead_time,tentant_id,gmt_create  FROM base_tentant;

DATE_ADD(NOW(),INTERVAL -40 day)

作用:获取指定的时间

select date_add(now(), interval 1 day); - 加1天

select date_add(now(), interval 1 hour); -加1小时

select date_add(now(), interval 1 minute); - 加1分钟

select date_add(now(), interval 1 second); -加1秒

select date_add(now(), interval 1 microsecond);-加1毫秒

select date_add(now(), interval 1 week);-加1周

select date_add(now(), interval 1 month);-加1月

select date_add(now(), interval 1 quarter);-加1季

select date_add(now(), interval 1 year);-加1年

MySQL adddate(), addtime()函数,可以用date_add() 来替代

DATE_SUB(NOW(),INTERVAL 40 day)

作用:获取指定日期 

DATE_SUB(NOW(),INTERVAL 40 day)  = DATE_ADD(NOW(),INTERVAL -40 day)

DATE_SUB(NOW(),INTERVAL -40 day) = DATE_ADD(NOW(),INTERVAL 40 day)

concat(字符串,拼接内容)

作用:拼接字符串

eg:concat( DATE_FORMAT(DATE_ADD(NOW(), INTERVAL - 1 YEAR), '%Y' ),'-01-01') 

 结果:2021-01-01

针对此日期格式的各种转换:

'2022-01-31 15:06:23'
1、转换为日期格式
select DATE_FORMAT('2022-01-31 15:06:23','yyyy-MM-dd');
select to_date('2022-01-31 15:06:23');
2、转换为年
select year('2022-01-31 15:06:23');

3、转换为月
select month('2022-01-31 15:06:23');

 4、转换为天
select day('2022-01-31 15:06:23');

 5、转换为小时
select hour('2022-01-31 15:06:23');

6、转换为分钟
select minute('2022-01-31 15:06:23');

7、转换为秒
select second('2022-01-31 15:06:23');


Java

LocaklDate 与 Date 互转

//Date 转 LocalDateTime        
Date date = new Date();
        //Wed Nov 02 16:27:40 CST 2022
        //方法一
        LocalDateTime localDateTime = date.toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime();
        //2022-11-02T16:27:40.918
        //方法二
        LocalDateTime localDateTime1 = LocalDateTime.ofInstant(date.toInstant(), ZoneId.systemDefault());


        //LocalDateTime 转 Date

        Date date1 = Date.from(localDateTime.atZone(ZoneId.systemDefault()).toInstant());

Date 类

Date类的作用:java.util.Date 代表一个精确的时间,精确到毫秒。

获取当前系统时间

//创建Date对象,表示当前系统时间
Date d = new Date();
System.out.println(d); //Sat Sep 11 14:36:59 CST 2021

获取当前时间的毫秒值

//long getTime() :获取当前时间的毫秒值
long time = d.getTime();
System.out.println("time = " + time);//1631342219139

注:设置时间可以创建Date对象时,把毫秒数放进构造器内

//时间设置相关
//Date(long date) : 
//使用毫秒数创建Date对象
    //设置时间(在1970年1月1日 00:00:00基础上增加设置的毫秒值)
Date d2 = new Date(1000L); //在1970年1月1日 00:00:00 加上1秒
//Thu Jan 01 08:00:01 CST 1970 中国时间在东8区,所以是 08:00:01
System.out.println(d2);

也可以通过对象。settime(毫秒数)设置

//void setTime(long  time) :
    //设置时间(在1970年1月1日 00:00:00基础上增加设置的毫秒值)
Date d3 = new Date();
d3.setTime(2000L); //在1970年1月1日 00:00:00 加上2秒
System.out.println(d3); //Thu Jan 01 08:00:02 CST 1970

SimpleDateFormat类   --设置时间格式

//1.使用无参构造方法创建转换对象
//使用默认格式转换日期
SimpleDateFormat sdf = new SimpleDateFormat();
//2. 日期格式化:将Date对象转为字符串
//String format(Date date)
Date date = new Date();
String strDate = sdf.format(date);
System.out.println(strDate); //2021/9/9 下午3:00
//这是simpledateformat的默认格式

注:可以通过传入参数来改变日期的指定格式

//\t 制表符 Tab  \n 换行
SimpleDateFormat sdf2 = new SimpleDateFormat("HH:mm E\nyyyy/MM/dd");
String d = sdf2.format(date);
System.out.println(d);
//17:19 周六
//2021/09/11

Calender类

获取当前时间的日历类

Calendar c = Calendar.getInstance();

get(int field) 获取指定日历字段的值 

get(int field) 获取指定日历字段的值

获取年
int year = c.get(Calendar.YEAR); //年
System.out.println("year = " + year); //year = 2022

获取月   (0-11 表示1-12月)
int month = c.get(Calendar.MONTH)+1; //月(0-11 表示1-12月)
System.out.println("month = " + month); //month = 9

获取 日
int date = c.get(Calendar.DATE); //日期
System.out.println("date = " + date); //date = 9

获取 时(12和24制),分,秒
int hour12 = c.get(Calendar.HOUR); //12小时制
int hour24 = c.get(Calendar.HOUR_OF_DAY); //24小时制
System.out.println("hour12 = " + hour12);
System.out.println("hour24 = " + hour24);

int minute = c.get(Calendar.MINUTE); //分
System.out.println("minute = " + minute);

int second = c.get(Calendar.SECOND); //秒

获取 周 注:1~7表示周日~周六
int index = c.get(Calendar.DAY_OF_WEEK)-1; 
//0~6 表示索引 String[] weeks = {"周日","周一","周二","周三","周四","周五","周六"}; 
System.out.println(weeks[index]);

Date getTime()  将Calendar转为Date对象
Date date1 = c.getTime();
System.out.println(date1);

getTimeInMillies() 返回该日历时间的毫秒值。
long millis = c.getTimeInMillis();
System.out.println(millis);

3种获取毫秒值的方法
long t1 = System.currentTimeMillis(); //推荐方式
long t2 = new Date().getTime();
long t3 = Calendar.getInstance().getTimeInMillis();

set(int field,  int value) 设置某个日历字段的值

set(int field,  int value) 设置某个日历字段的值
Calendar c = Calendar.getInstance();
//set(int field,  int value) 设置某个日历字段的值
c.set(Calendar.YEAR, 2008); //年设置为2008
c.set(Calendar.MONTH, 7); //月设置为8月,因为月份以0开头,所以7表示八月
c.set(Calendar.DATE,8);//日设置为8

set​(int year, int month, int date) 设置年,月,日
//直接设置全部年月日时分秒也行
c.set(2008, 7,8);
c.set(2008, Calendar.AUGUST,8);

add(int field, int amount) 添加或减去某个日历字段的值。 

add(int field,  int amount) 添加或减去某个日历字段的值。
//add(int field,  int amount) 添加或减去某个日历字段的值。
//2021年9月9号,29天之前是几月几号
Calendar today = Calendar.getInstance();
today.add(Calendar.DATE,-29);

获得当月第一天

calendar.getActualMinimum(calendar.DAY_OF_MONTH)  

getActualMaximum(calendar.DAY_OF_MONTH  获得当月最后一天

获取当月15号

 int year = calendar.get(Calendar.YEAR);//年份
   int month = calendar.get(Calendar.MONTH) + 1;//月份
   int actualMinimum = calendar.getActualMinimum(calendar.DAY_OF_MONTH);
   String Fifteenday = String.valueOf(year)+"-"+month+"-"+(actualMinimum+14);
   Date FifteenTime = sdf.parse(Fifteenday);

获取当月最后一天

   int actualMaximum = calendar.getActualMaximum(Calendar.DATE);
   String endMonther = String.valueOf(year)+"-"+month+"-"+(actualMaximum-7);
   Date endMonthertime = sdf.parse(endMonther);

 判断是否超过3天

//判断时间是否超过3天IMilestoneOverTimeService
  SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
  Date pushTime = milestoneOverTime.getPushTime();/*要判断的时间*/
  Calendar cal = Calendar.getInstance();
  cal.setTime(pushTime);//Date转换为Calendar
  cal.add(Calendar.DATE, 3);//将日期往后推3天,减少3天则-3
  String after = sdf.format(cal.getTime());
//Calendar转换为Date,再转换为String       --3天后的时间
  long time = sdf.parse(after).getTime(); //--3天后的时间
  long nowTime = new Date().getTime();
//long nowTime = sdf.parse("2022-11-04").getTime();//-----测试
   Boolean flag=true;
   if (nowTime>=time){//当前时间大于推送3天后的时间

;