<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
// 獲取當前時間 now := time.Now() // 當前時間的年、月、日、小時、分鐘、秒和納秒都可以通過現有介面直接獲取 year := now.Year() month := now.Month() day := now.Day() hour := now.Hour() minute := now.Minute() second := now.Second() nanosecond := now.Nanosecond() // 當前時間的微秒和毫秒是通過納秒計算生成 microsecond := nanosecond / 1e3 millisecond := nanosecond / 1e6 fmt.Println(now.Format("2006-01-02 15:04:05.000000000")) fmt.Println(year, month, day, hour, minute, second, nanosecond, microsecond, millisecond)
執行結果如下:
# 當前時間格式輸出
2022-06-09 19:25:52.022598620
2022 June 9 19 25 52 22598620 22598 22
// 獲取從1970經過的時間,秒和納秒都可以通過現有介面直接獲取 sec := now.Unix() // 時間戳位數為10 ms := now.UnixMilli() // 時間戳位數為13 us := now.UnixMicro() // 時間戳位數為16 ns := now.UnixNano() // 時間戳位數為19 fmt.Printf("sec:%vn ms:%vn us:%vn ns:%vn", sec, ms, us, ns)
執行結果如下:
# 1970經過的時間格式輸出
sec:1654773952
ms:1654773952022
us:1654773952022598
ns:1654773952022598620
// 時間間隔返回的是time.Duration,下面以1h1m1s1ms1us1ns的時間間隔舉例,測試各種格式的列印效果 duration := 1*time.Hour + 1*time.Minute + 1*time.Second + 1*time.Millisecond + 1*time.Microsecond + 1*time.Nanosecond // 直接使用%v列印,不轉換sec、ms或其他。 fmt.Printf("duration:%vn", duration) fmt.Printf("duration:%6vn", duration) fmt.Printf("duration:%.6vn", duration) fmt.Printf("duration:%.3vn", duration) // duration支援Hours()、 Minutes()、Seconds() 和 // Milliseconds()、Microseconds()、Nanoseconds()介面 // 前三個介面返回型別為float64可以通過0.3f列印小數點後的數, // 後三個為int64,是整數,小數點後都是0 // 下面列舉秒和毫秒的格式列印,其他時間單位可以參考秒和毫秒 // 秒的列印格式%f可以列印小數點後9位,精確到納秒 fmt.Printf("duration:%vsecn", duration.Seconds()) fmt.Printf("duration:%0.3fsecn", duration.Seconds()) fmt.Printf("duration:%0.6fsecn", duration.Seconds()) // 毫秒沒有小數點,都是整數,轉換成float後,小數點後都是0 fmt.Printf("duration:%vmsn", duration.Milliseconds()) fmt.Printf("duration:%.3dmsn", duration.Milliseconds()) fmt.Printf("duration:%.3fmsn", float64(duration.Milliseconds())) }
行結果如下:
# 1h1m1s1ms1us1ns的時間間隔舉例格式輸出
# %v沒有單位轉換的時間輸出
duration:1h1m1.001001001s
duration:1h1m1.001001001s
duration:1h1m1.
duration:1h1# 秒的格式輸出
duration:3661.001001001sec
duration:3661.001sec
duration:3661.001001sec# 毫秒的格式輸出
duration:3661001ms
duration:3661001ms
duration:3661001.000ms
通過測試程式可以看到:
1.沒時間單位轉換的格式輸出,直接用%v能精確到ns,%.3V,只是對輸出的字串進行了切割。此處建議直接用%v即可。
2.對於秒的格式輸出,%v精確到小數點9位,即納秒。當然可以根據%f的格式調整,例如%.3f精確到毫秒
3.對於毫秒的格式輸出,直接用%v或%d即可,轉換成float64沒有意義
一般在統計一個函數或一段程式執行了多長時間,一般建議使用第二種方式,轉換成秒的格式輸出,再根據精度調整%f的格式即可。
第一種方式有可能出現時間單位不統一,例如一個是分鐘,一個是秒。
上面例子完成的程式碼如下:
package main import ( "fmt" "time" ) func main() { // 獲取當前時間 now := time.Now() // 當前時間的年、月、日、小時、分鐘、秒和納秒都可以通過現有介面直接獲取 year := now.Year() month := now.Month() day := now.Day() hour := now.Hour() minute := now.Minute() second := now.Second() nanosecond := now.Nanosecond() // 當前時間的微秒和毫秒是通過納秒計算生成 microsecond := nanosecond / 1e3 millisecond := nanosecond / 1e6 fmt.Println(now.Format("2006-01-02 15:04:05.000000000")) fmt.Println(year, month, day, hour, minute, second, nanosecond, microsecond, millisecond) // 獲取從1970經過的時間,秒和納秒都可以通過現有介面直接獲取 sec := now.Unix() // 時間戳位數為10 ms := now.UnixMilli() // 時間戳位數為13 us := now.UnixMicro() // 時間戳位數為16 ns := now.UnixNano() // 時間戳位數為19 fmt.Printf("sec:%vn ms:%vn us:%vn ns:%vn", sec, ms, us, ns) // 時間間隔返回的是time.Duration,下面以1h1m1s1ms1us1ns的時間間隔舉例,測試各種格式的列印效果 duration := 1*time.Hour + 1*time.Minute + 1*time.Second + 1*time.Millisecond + 1*time.Microsecond + 1*time.Nanosecond // 直接使用%v列印,不轉換sec、ms或其他。 fmt.Printf("duration:%vn", duration) fmt.Printf("duration:%6vn", duration) fmt.Printf("duration:%.6vn", duration) fmt.Printf("duration:%.3vn", duration) // duration支援Hours()、 Minutes()、Seconds() 和 // Milliseconds()、Microseconds()、Nanoseconds()介面 // 前三個介面返回型別為float64可以通過0.3f列印小數點後的數, // 後三個為int64,是整數,小數點後都是0 // 下面列舉秒和毫秒的格式列印,其他時間單位可以參考秒和毫秒 // 秒的列印格式%f可以列印小數點後9位,精確到納秒 fmt.Printf("duration:%vsecn", duration.Seconds()) fmt.Printf("duration:%0.3fsecn", duration.Seconds()) fmt.Printf("duration:%0.6fsecn", duration.Seconds()) // 毫秒沒有小數點,都是整數,轉換成float後,小數點後都是0 fmt.Printf("duration:%vmsn", duration.Milliseconds()) fmt.Printf("duration:%.3dmsn", duration.Milliseconds()) fmt.Printf("duration:%.3fmsn", float64(duration.Milliseconds())) }
下面是時間間隔的時間單位轉換的原始碼:
// time.go // Nanoseconds returns the duration as an integer nanosecond count. func (d Duration) Nanoseconds() int64 { return int64(d) } // Microseconds returns the duration as an integer microsecond count. func (d Duration) Microseconds() int64 { return int64(d) / 1e3 } // Milliseconds returns the duration as an integer millisecond count. func (d Duration) Milliseconds() int64 { return int64(d) / 1e6 } // These methods return float64 because the dominant // use case is for printing a floating point number like 1.5s, and // a truncation to integer would make them not useful in those cases. // Splitting the integer and fraction ourselves guarantees that // converting the returned float64 to an integer rounds the same // way that a pure integer conversion would have, even in cases // where, say, float64(d.Nanoseconds())/1e9 would have rounded // differently. // Seconds returns the duration as a floating point number of seconds. func (d Duration) Seconds() float64 { sec := d / Second nsec := d % Second return float64(sec) + float64(nsec)/1e9 } // Minutes returns the duration as a floating point number of minutes. func (d Duration) Minutes() float64 { min := d / Minute nsec := d % Minute return float64(min) + float64(nsec)/(60*1e9) } // Hours returns the duration as a floating point number of hours. func (d Duration) Hours() float64 { hour := d / Hour nsec := d % Hour return float64(hour) + float64(nsec)/(60*60*1e9) }
補充:如果想格式化為12小時方式,需指定PM
。
func formatDemo() { now := time.Now() // 格式化的模板為Go的出生時間2006年1月2號15點04分 Mon Jan // 24小時制 fmt.Println(now.Format("2006-01-02 15:04:05.000 Mon Jan")) // 12小時制 fmt.Println(now.Format("2006-01-02 03:04:05.000 PM Mon Jan")) fmt.Println(now.Format("2006/01/02 15:04")) fmt.Println(now.Format("15:04 2006/01/02")) fmt.Println(now.Format("2006/01/02")) }
到此這篇關於golang中time包之時間間隔格式化和秒、毫秒、納秒等時間戳格式輸出的文章就介紹到這了,更多相關golang time包時間間隔格式化內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45