重慶分公司,新征程啟航
為企業提供網站建設、域名注冊、服務器等服務
為企業提供網站建設、域名注冊、服務器等服務
全球以英國倫敦格林威治作為零度經線的起點,每隔15經度為一個時區,15度經線為該時區的中央經線,共分為24個時區。由西向東每隔15經度增加一個時區,相反的,每向西15經度減少一個時區。中國所在時區為東8區。
成都創新互聯是一家專業提供臨高企業網站建設,專注與成都做網站、網站建設、H5場景定制、小程序制作等業務。10年已為臨高眾多企業、政府機構等服務。創新互聯專業網絡公司優惠進行中。
當前時間 time.Now() 返回的是當地時區的時間:
CST可以代表如下四個不同的時區:
time.Now() 返回的 +0800 CST 表示的就是中國標準時間,與UTC時間有如下的轉化:
Wall Clocks表示掛鐘時間,存儲的是自1970 年 1 月 1 日 0 時 0 分 0 秒以來的時間戳,當系統和授時服務器進行校準時間時間操作時,有可能造成這一秒是2018-1-1 00:00:00,而下一秒變成了2017-12-31 23:59:59的情況。
Monotonic Clocks,意思是單調時間的,所謂單調,就是只會不停的往前增長,不受校時操作的影響,這個時間是自進程啟動以來的秒數。
time.Now() 返回的 m=+0.004002201 就是表示Monotonic Clocks
go語言中如果不設置指定的時區,通過 time.Now() 獲取到的就是本地時區
設置時區有兩種方式:
固定時區到東八區。但這種不是對程序的全局設置,每次獲取時都需要固定時區
加載指定時區。但如果沒有go環境使用這種方式就會加載失敗,因為時區信息是放在go的安裝包中的。
如果你用第二種方式加載時區,在打docker鏡像時就需要進行時區相關的配置,配置文件如下:
參考文章:
這樣。不過只是個精確到納秒的計時器,不是精確到納秒的當前時間。windows好像只能拿到ms精度的當前時間吧,不是很清楚。
package main
import (
"syscall"
"time"
"unsafe"
)
func NewStopWatch() func() time.Duration {
var QPCTimer func() func() time.Duration
QPCTimer = func() func() time.Duration {
lib, _ := syscall.LoadLibrary("kernel32.dll")
qpc, _ := syscall.GetProcAddress(lib, "QueryPerformanceCounter")
qpf, _ := syscall.GetProcAddress(lib, "QueryPerformanceFrequency")
if qpc == 0 || qpf == 0 {
return nil
}
var freq, start uint64
syscall.Syscall(qpf, 1, uintptr(unsafe.Pointer(freq)), 0, 0)
syscall.Syscall(qpc, 1, uintptr(unsafe.Pointer(start)), 0, 0)
if freq = 0 {
return nil
}
freqns := float64(freq) / 1e9
return func() time.Duration {
var now uint64
syscall.Syscall(qpc, 1, uintptr(unsafe.Pointer(now)), 0, 0)
return time.Duration(float64(now-start) / freqns)
}
}
var StopWatch func() time.Duration
if StopWatch = QPCTimer(); StopWatch == nil {
// Fallback implementation
start := time.Now()
StopWatch = func() time.Duration { return time.Since(start) }
}
return StopWatch
}
func main() {
// Call a new stop watch to create one from this moment on.
watch := NewStopWatch()
// Do some stuff that takes time.
time.Sleep(1)
// Call the stop watch itself and it will return a time.Duration
dur := watch()
}
這和語言沒關系,操作系統要提供這樣的原語。linux和windows都是可以的。
go語言中%.2f是一個格式化輸出符號,表示輸出一個浮點數,保留兩位小數。例如,如果x是一個浮點數,那么fmt.Printf(“%.2f”, x)就會輸出x的值,只保留兩位小數。