近期在做一些首頁的統計資料複習了下mysql的時間函式,以及後續修改成 傳入時間查詢時使用的joda-time
軟體簡介
JodaTime 提供了一組Java類包用於處理包括ISO8601標準在內的date和time。可以利用它把JDK Date和Calendar類完全替換掉,而且仍然能夠提供很好的整合。
Joda-Time主要的特點包括:
1. 易於使用:Calendar讓獲取"正常的"的日期變得很困難,使它沒辦法提供簡單的方法,而Joda-Time能夠 直接進行訪問域並且索引值1就是代表January。
2. 易於擴充套件:JDK支援多日曆系統是通過Calendar的子類來實現,這樣就顯示的非常笨重而且事實 上要實現其它日曆系統是很困難的。Joda-Time支援多日曆系統是通過基於Chronology類的外掛體系來實現。
3. 提供一組完整的功能:它打算提供 所有關係到date-time計算的功能.Joda-Time當前支援6種日曆系統,而且在將來還會繼續新增。有著比JDK Calendar更好的整體效能等等。
https://www.joda.org/joda-time/
1.java工具類實現規定時間
<dependency> <groupId>joda-time</groupId> <artifactId>joda-time</artifactId> <version>2.9.4</version> </dependency>
我們也只是使用不敢多說啥
直接上工具類(今天,本週,本月,前幾月起始時間)
public class JodaTimeUtils { public static String getThisWeekEndTime() { DateTime now = DateTime.now(); now = now.withDayOfWeek(7) .withHourOfDay(23) .withMinuteOfHour(59) .withSecondOfMinute(59); //本週日 return DateFormatUtils.format(now.toDate(), "yyyy-MM-dd HH:mm:ss"); } public static String getThisWeekStartTime() { DateTime now = DateTime.now(); now = now.withDayOfWeek(1) .withHourOfDay(0) .withMinuteOfHour(0) .withSecondOfMinute(0); //本週1 return DateFormatUtils.format(now.toDate(), "yyyy-MM-dd HH:mm:ss"); } public static String getThisDayStartTime() { DateTime now = DateTime.now(); now = now.millisOfDay() .withMinimumValue(); //今天 return DateFormatUtils.format(now.toDate(), "yyyy-MM-dd HH:mm:ss"); } public static String getThisDayEndTime() { DateTime now = DateTime.now(); now = now.millisOfDay() .withMaximumValue(); //今天 return DateFormatUtils.format(now.toDate(), "yyyy-MM-dd HH:mm:ss"); } public static String getThisMonthStartTime() { DateTime now = DateTime.now(); now = now.dayOfMonth().withMinimumValue() .withHourOfDay(0) .withMinuteOfHour(0) .withSecondOfMinute(0); //本月初 return DateFormatUtils.format(now.toDate(), "yyyy-MM-dd HH:mm:ss"); } public static String getThisMonthEndTime() { DateTime now = DateTime.now(); now = now.dayOfMonth().withMaximumValue() .withHourOfDay(23) .withMinuteOfHour(59) .withSecondOfMinute(59); //本月末 return DateFormatUtils.format(now.toDate(), "yyyy-MM-dd HH:mm:ss"); } // i 0 本月1上一個月 類推 public static String getMonthStartTime(int i) { DateTime now = DateTime.now(); now = now.minusMonths(i).dayOfMonth().withMinimumValue() .withHourOfDay(0) .withMinuteOfHour(0) .withSecondOfMinute(0); //本月初 return DateFormatUtils.format(now.toDate(), "yyyy-MM-dd HH:mm:ss"); } public static String getMonthEndTime(int i) { DateTime now = DateTime.now(); now = now.minusMonths(i).dayOfMonth().withMaximumValue() .withHourOfDay(23) .withMinuteOfHour(59) .withSecondOfMinute(59); //本月末 return DateFormatUtils.format(now.toDate(), "yyyy-MM-dd HH:mm:ss"); } }
2.mysql 函式實現
2.1 今日
TO_DAYS(create_time) = TO_DAYS(NOW())
2.2 本週
這裡有個1是因為與國外周的起始不一樣我國是週一國外是周天 所以多1
YEARWEEK(date_format(create_time,'%Y-%m-%d'), 1) = YEARWEEK(now(), 1)
2.3 本月
DATE_FORMAT( create_time, '%Y%m' ) = DATE_FORMAT( CURDATE( ) , '%Y%m' )
2.4近幾月
i 最小為0 指本月 1的話就上個月類推 如果你想搞個下個月 -1 也是支援的
date_format(create_time, '%Y %m') = date_format(DATE_SUB(curdate(), INTERVAL "+ i +" MONTH),'%Y %m')
分享到此
如有問題麻煩大佬告知
感謝 !!!
2021-04-20 16:09:34