joda-time的簡單使用及mysql時間函式的使用(今天,本週,本月)

蕃茄炒番茄拌土豆 發表於 2021-04-20

近期在做一些首頁的統計資料複習了下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