1. 程式人生 > >用到的時間工具:前後x天,前後x分鐘,某小時初始,某小時結束,週一,週日,月第一天,月最後一天,季度第一天,季度最後一天,年度第一天,年度最後一天

用到的時間工具:前後x天,前後x分鐘,某小時初始,某小時結束,週一,週日,月第一天,月最後一天,季度第一天,季度最後一天,年度第一天,年度最後一天

程式碼如下:

// 當天前後x天的時間,value負數表示x天前,正數表示x天后
    fun getDay(value: Int): Timestamp {
        val cal = Calendar.getInstance()
        cal.add(Calendar.DAY_OF_MONTH, value)
        return Timestamp(cal.timeInMillis)
    }

    // 某個時間x分鐘前後的時間,value負數表示x分鐘前,正數表示x分鐘後
    fun getMinute(currentTime: Timestamp, value: Int): Timestamp {
        val cal = Calendar.getInstance()
        cal.time = currentTime
        cal.add(Calendar.MINUTE, value)
        return Timestamp(cal.timeInMillis)
    }

    // 當天某小時初始時間,value表示某小時
    fun getHourStart(value: Int): Timestamp {
        val cal = Calendar.getInstance()
        cal.set(Calendar.HOUR_OF_DAY, value)
        cal.set(Calendar.SECOND, 0)
        cal.set(Calendar.MINUTE, 0)
        cal.set(Calendar.MILLISECOND, 0)
        return Timestamp(cal.timeInMillis)
    }

    // 當天某小時結束時間,value表示某小時
    fun getHourEnd(value: Int): Timestamp {
        val cal = Calendar.getInstance()
        cal.set(Calendar.HOUR_OF_DAY, value)
        cal.set(Calendar.SECOND, 59)
        cal.set(Calendar.MINUTE, 59)
        cal.set(Calendar.MILLISECOND, 999)
        return Timestamp(cal.timeInMillis)
    }

    // 週一時間 value: 0表示本週,1表示下週,-1表示上週
    fun getWeekStartTime(value: Int): Timestamp {
        val cal = Calendar.getInstance()
        val weekday = cal.get(Calendar.DAY_OF_WEEK) - value * 7
        cal.add(Calendar.DATE, 2 - weekday)
        return Timestamp(cal.timeInMillis)
    }

    // 週日時間 value: 0表示本週,1表示下週,-1表示上週
    fun getWeekEndTime(value: Int): Timestamp {
        val cal = Calendar.getInstance()
        val weekday = cal.get(Calendar.DAY_OF_WEEK) - value * 7
        cal.add(Calendar.DATE, 8 - weekday)
        return Timestamp(cal.timeInMillis)
    }

    // 月第一天時間 value: 0表示本月,1表示下月,-1表示上月
    fun getMonthStartTime(value: Int): Timestamp {
        val cal = Calendar.getInstance()
        cal.add(Calendar.MONTH, value);
        cal.set(Calendar.DAY_OF_MONTH, cal.getActualMinimum(Calendar.DAY_OF_MONTH))
        return Timestamp(cal.timeInMillis)
    }

    // 月最後一天時間 value: 0表示本月,1表示下月,-1表示上月
    fun getMonthEndTime(value: Int): Timestamp {
        val cal = Calendar.getInstance()
        cal.add(Calendar.MONTH, value);
        cal.set(Calendar.DAY_OF_MONTH, cal.getActualMaximum(Calendar.DAY_OF_MONTH))
        return Timestamp(cal.timeInMillis)
    }

    // 季度第一天時間 value: 0表示本季度,1表示下季度,-1表示上季度
    fun getQuarterStartTime(value: Int): Timestamp {
        val cal = Calendar.getInstance()
        val currentMonth = cal.get(Calendar.MONTH) + 1 + value * 3
        //只計算到去年第四季度或明年第一季度
        val month: Int = if (currentMonth < 1) 9 else if (currentMonth in 1..3) 0 else if (currentMonth in 4..6) 3 else if (currentMonth in 7..9) 6 else if (currentMonth in 10..12) 9 else 0
        if (currentMonth < 1) cal.add(Calendar.YEAR, -1) else if (currentMonth > 12) cal.add(Calendar.YEAR, 1) else {
        }
        cal.set(Calendar.MONTH, month)
        cal.set(Calendar.DATE, 1)
        return Timestamp(cal.timeInMillis)
    }

    // 季度最後一天時間 value: 0表示本季度,1表示下季度,-1表示上季度
    fun getQuarterEndTime(value: Int): Timestamp {
        val cal = Calendar.getInstance()
        val currentMonth = cal.get(Calendar.MONTH) + 1 + value * 3
        //只計算到去年第四季度或明年第一季度
        val month: Int = if (currentMonth < 1) 11 else if (currentMonth in 1..3) 2 else if (currentMonth in 4..6) 5 else if (currentMonth in 7..9) 8 else if (currentMonth in 10..12) 11 else 2
        val day: Int = if (currentMonth < 1) 31 else if (currentMonth in 1..3) 31 else if (currentMonth in 4..6) 30 else if (currentMonth in 7..9) 30 else if (currentMonth in 10..12) 31 else 31
        if (currentMonth < 1) cal.add(Calendar.YEAR, -1) else if (currentMonth > 12) cal.add(Calendar.YEAR, 1) else {
        }
        cal.set(Calendar.MONTH, month)
        cal.set(Calendar.DATE, day)
        return Timestamp(cal.timeInMillis)
    }

    //年度第一天時間 value: 0表示今年,1表示明年,-1表示去年
    fun getYearStartTime(value: Int): Timestamp {
        val cal = Calendar.getInstance()
        cal.add(Calendar.YEAR, value);
        cal.set(Calendar.MONTH, 0)
        cal.set(Calendar.DATE, 1)
        return Timestamp(cal.timeInMillis)
    }

    //年度最後一天時間 value: 0表示今年,1表示明年,-1表示去年
    fun getYearEndTime(value: Int): Timestamp {
        val cal = Calendar.getInstance()
        cal.add(Calendar.YEAR, value);
        cal.set(Calendar.MONTH, 11)
        cal.set(Calendar.DATE, 31)
        return Timestamp(cal.timeInMillis)
    }

部分自測的結果

@Test
    fun testDate(){
        val value = 4
        val ds = commUtil.getHourStart(0)
        val de = commUtil.getHourEnd(23)
        val dd = commUtil.getHourStart(8)
        val ws = commUtil.getWeekStartTime(-38)
        val we = commUtil.getWeekEndTime(-38)
        val ms = commUtil.getMonthStartTime(value)
        val me = commUtil.getMonthEndTime(value)
        val qs = commUtil.getQuarterStartTime(-5)
        val qe = commUtil.getQuarterEndTime(-5)
        val ys = commUtil.getYearStartTime(value)
        val ye = commUtil.getYearEndTime(value)
        log.info(">>>天:$ds>>>$de>>>$dd>>>周:$ws>>>$we>>>月:$ms>>>$me>>>季:$qs>>>$qe>>>年:$ys>>>$ye")
    }

當天0點,當天24點,當天8點,38周前週一,38周前週日,四個月後月初,四個月後月末,去年第四季度起始,去年第四季度結束,四年年初,四年年末

>>>天:2018-09-19 00:00:00.0>>>2018-09-19 23:59:59.999>>>2018-09-19 08:00:00.0>>>周:2017-12-25 11:29:01.449>>>2017-12-31 11:29:01.449>>>月:2019-01-01 11:29:01.449>>>2019-01-31 11:29:01.449>>>季:2017-10-01 11:29:01.449>>>2017-12-31 11:29:01.449>>>年:2022-01-01 11:29:01.449>>>2022-12-31 11:29:01.449

相關推薦

到的時間工具前後x前後x分鐘小時初始小時結束週一週日第一最後季度第一季度最後年度第一年度最後

程式碼如下: // 當天前後x天的時間,value負數表示x天前,正數表示x天后 fun getDay(value: Int): Timestamp { val cal = Calendar.getInstance() c

介紹一個axios除錯好工具axios-mock-adapter

上一篇文章中寫到用promise時應注意的問題,這一篇文章繼續介紹一個可以和axios庫配合的好工具: axios-mock-adapter。axios-mock-adapter可以用來攔截http請求,並模擬響應,使用起來也很簡單,比如你想模擬下伺服器返回個500錯誤,你可以這麼寫: 1 impo

時間工具類DateUlits判斷一時間距離當前時間分鐘、幾小時、幾

在我們開發中經常要對時間進行處理,把這些處理方法做成一個工具類是十分方面的,下面是我整理的一些時間處理的方法。 DateUlits方法目錄: 1、列印當前日期 2、輸入年-月-日  轉化為date型別 3、獲得一個 Date 物件例項 4、設定時間 5、獲取當前時間的前一

js實現釋出了多久的時間描述分鐘小時幾個幾年前

<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head&

日期格式化SimpleDateFormat,以及獲取當前周的週一週日的日期當前月第一個和最後的日期

import java.text.ParseException;import java.text.SimpleDateFormat;import java.util.Calendar;/** * @author 作者:吳林飛 * @version 建立時間:2018年4月22

計算指定時間與當前的時間差 比如3前、10分鐘

計算指定時間與當前的時間差  比如,3天前、10分鐘前(這個在專案中經常遇到,所以記錄了下來) 以下是實現方法: /**  * 計算指定時間與當前的時間差  * @param compareDate   某一指定時間   * @return 多少(秒or分or天or

js實現文章或個人動態釋出了多久的時間描述分鐘小時前等

一般來說,為提高使用者體驗,在某些管理文章或個人動態時,需要在右下角顯示該文章或該動態已經發布了多久。 那麼該需求具體到底怎麼實現呢?如果沒思路可能會覺得有點難,但是一旦有了思路之後,其實實現起來很簡單。 1.首先我們要明確顯示的時間層具體有幾層; 2.要明確年月日時分

微信支付報錯time_expire時間過短刷卡至少1分鐘其他5分鐘]

log pre 原來 exp 其他 str brush 支付 clas 查了下代碼: $input->SetTime_expire(date("YmdHis", time() + 600));//二維碼過期時間。默認10min 10分鐘,沒問題。   網上查了下

GA利用GA對一元函數進行優化過程x∈(0,10)中y的最大值——Jason niu

title variable ati 過程 優化 mea ... http [] x = 0:0.01:10; y = x + 10*sin(5*x)+7*cos(4*x); figure plot(x, y) xlabel(‘independent variable

快速開發專案到的工具UI 設定利器 sketch

需求設計: axaure8.0 tool: teambition/石墨、幕布、   介面管理tool(後端開發介面,pc,m,app使用) https://www.eolinker.com/#/   ui 設計大都用sketch sketch只有蘋果版; 管理工具用藍湖

Linux下的開發工具vimgccgdbmakefile以及yum語句安裝軟體

Linux下的開發工具:vim,gcc,gdb,makefile以及yum語句安裝軟體 1. vi/vim  vi/vim都是多模式編譯器,vim是vi的升級版本。vim有12個模式,在這我們先說3種模式,命令模式,插入模式,底行模式。 2. vim基本操作: $vim t

JS函式實現輸入年獲取這個日期是這年的第多少

<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title></title> </head> <body>

工具java根據第一張表製作第二張表的主鍵(在一個字串的基礎上增加位數有順序)

1.我根據實際實況說明,兩張有聯絡的表,為了避免建立很多欄位,可以在第一張表的主鍵基礎上增加幾位作為第二張表的主鍵,這幾位是有順序的。java方法如下,傳參需要第二張表的表名,第一張表的主鍵,第二張表相關記錄的最大主鍵,例如:eb592e35c51c4dfb89300448c80d3a400003,

Java編碼輔助工具Lombok —— 避免重複臃腫的程式碼提高效率

在專案開發過程中,經常會涉及到一些調整很少但又必不可少的環節,比如實體類的Getter/Setter方法,ToString方法等。這時可以使用Lombok來避免這種重複的操作,減少非核心程式碼的臃腫,提高編碼效率。   如何在IntelliJ IDEA中引入Lombok 安裝Lombok

Java編碼輔助工具Lombok —— 避免重復臃腫的代碼提高效率

actor tin protect oge details err con bsp transient 在項目開發過程中,經常會涉及到一些調整很少但又必不可少的環節,比如實體類的Getter/Setter方法,ToString方法等。這時可以使用Lombok來避免這種重復的

Java基礎複習第五陣列定義(靜態、動態初始化)陣列儲存機制及陣列的反轉、排序、遍歷

一 陣列定義和訪問 1.案例引入: 如果需要定義多個變數,那麼我們建議使用容器,一次性儲存多個數據,統一操作。 2.容器: 是將多個數據儲存到一起,每個資料稱為該容器的元素。 3.Java中容器: 陣列,集合 陣列:是一個長度固定的容器,而且容器中的元素

What-If 工具無需寫程式碼即可測試機器學習模型

文 / Google AI 軟體工程師 James Wexler 來源 | TensorFlow 公眾號 構建有效的機器學習 (ML) 系統需要提出許多問題。僅僅訓練一個模型,然後放任不管,是遠遠不夠的。而優秀的開發者就像偵探一樣,總是不斷探索,試圖更好地理解自

Android時間工具類 本地轉UTCUTC轉本地

package com.peopleapp.en.util; import android.content.Context; import android.text.TextUtils; import android.text.format.DateFor

DOS工具 自動從VSS獲取並編譯複製上傳打包的工具

@echo offrem -- =============================================rem -- DESCRIPTION: <自動_VSS管理バッチ>rem -- AUTHOR:  <>rem -- CREATE

1.7 開始第一幅“碼繪”——時間控制變數讓懵逼臉動起來

引言——碼繪的缺點和優點 在之前的程式中,所有懵逼臉的表情都是僵住不動的。 如此一來,相比於傳統紙面繪畫,碼繪技術還體現不出什麼優點,可以說還有一系列缺點: 編寫程式碼麻煩容易出現筆誤,學習程式語言