詳解Golang中的各種時間操作
需求
時間格式的轉(zhuǎn)換比較麻煩,自己寫了個工具,可以通過工具中的這些方法相互調(diào)用轉(zhuǎn)成自己想要的格式,代碼如下,后續(xù)有新的函數(shù)再添加
實現(xiàn)代碼
package utils
import "time"
const (
TIMEFORMAT = "20060102150405"
NORMALTIMEFORMAT = "2006-01-02 15:04:05"
)
// 當(dāng)前時間
func GetTime() time.Time{
return time.Now()
}
// 格式化為:20060102150405
func GetTimeString(t time.Time) string {
return t.Format(TIMEFORMAT)
}
// 格式化為:2006-01-02 15:04:05
func GetNormalTimeString(t time.Time) string {
return t.Format(NORMALTIMEFORMAT)
}
// 轉(zhuǎn)為時間戳->秒數(shù)
func GetTimeUnix(t time.Time) int64 {
return t.Unix()
}
// 轉(zhuǎn)為時間戳->毫秒數(shù)
func GetTimeMills(t time.Time) int64 {
return t.UnixNano() / 1e6
}
// 時間戳轉(zhuǎn)時間
func GetTimeByInt(t1 int64) time.Time{
return time.Unix(t1,0)
}
// 字符串轉(zhuǎn)時間
func GetTimeByString(timestring string) (time.Time,error){
if timestring == "" {
return time.Time{},nil
}
return time.ParseInLocation(TIMEFORMAT, timestring, time.Local)
}
// 標準字符串轉(zhuǎn)時間
func GetTimeByNormalString(timestring string) (time.Time,error){
if timestring == "" {
return time.Time{},nil
}
return time.ParseInLocation(NORMALTIMEFORMAT, timestring, time.Local)
}
// 比較兩個時間大小
func CompareTime(t1 ,t2 time.Time) bool {
return t1.Before(t2)
}
// n小時后的時間字符串
func GetNextHourTime(s string, n int64) string {
t2, _ := time.ParseInLocation(TIMEFORMAT, s, time.Local)
t1 := t2.Add(time.Hour * time.Duration(n))
return GetTimeString(t1)
}
// 計算倆個時間差多少小時
func GetHourDiffer(start_time, end_time string) float32 {
var hour float32
t1, err := time.ParseInLocation(TIMEFORMAT, start_time, time.Local)
t2, err := time.ParseInLocation(TIMEFORMAT, end_time, time.Local)
if err == nil && CompareTime(t1,t2) {
diff := GetTimeUnix(t2) - GetTimeUnix(t1)
hour = float32(diff) / 3600
return hour
}
return hour
}
// 判斷當(dāng)前時間是否是整點
func Checkhours() bool {
_, m, s := GetTime().Clock()
if m == s && m == 0 && s == 0 {
return true
}
return false
}
// 時間字符串轉(zhuǎn)為標準字符串
func StringToNormalString(t string) string {
if !(len(TIMEFORMAT) == len(t) || len(SHORTTIMESTRING) == len(t)) {
return t
}
if len(SHORTTIMESTRING) == len(t) {
t += "000000"
}
if len(TIMEFORMAT) == len(t) {
t1,err:= GetTimeByString(t)
if err != nil {
return t
}
t = GetTimeString(t1)
}
return t
}
判斷一個時間點是否在一個時間點之后
過程:這個對于時間戳而言非常簡單,但是對于其他的需要轉(zhuǎn)換到time即可對比
stringToTime, _ := time.Parse("2006-01-02 15:04:05", "2017-12-12 12:00:00")
beforeOrAfter := stringToTime.After(time.Now())
if beforeOrAfter == true {
fmt.Println("2017-12-12 12:00:00在tNow之后!")
} else {
fmt.Println("2017-12-12 12:00:00在tNow之前!")
}
判斷一個時間相比另外一個時間點過去了多久
過程:這個是用Time的方式來對比
beginTime :=time.Now()
time.Sleep(time.Second*1)
durtime:= time.Since(beginTime)
fmt.Println("離現(xiàn)在過去了:",durtime)
到此這篇關(guān)于詳解Golang中的各種時間操作的文章就介紹到這了,更多相關(guān)Golang 時間操作內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Go 如何基于IP限制HTTP訪問頻率的方法實現(xiàn)
這篇文章主要介紹了Go 如何基于IP限制HTTP訪問頻率的方法實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-11-11
詳解Golang time包中的結(jié)構(gòu)體time.Time
在日常開發(fā)過程中,會頻繁遇到對時間進行操作的場景,使用 Golang 中的 time 包可以很方便地實現(xiàn)對時間的相關(guān)操作,本文先講解一下 time 包中的結(jié)構(gòu)體 time.Time,需要的朋友可以參考下2023-07-07
使用golang實現(xiàn)一個MapReduce的示例代碼
這篇文章主要給大家介紹了關(guān)于如何使用golang實現(xiàn)一個MapReduce,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-09-09
golang調(diào)用c實現(xiàn)的dll接口細節(jié)分享
這篇文章主要介紹了golang調(diào)用c實現(xiàn)的dll接口細節(jié)分享,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2021-05-05

