从授时服务器获取时间的函数[GetNetWorkTime()]

func GetNetWorkTime() (time.Time, error) { var host string flag.StringVar(&host, "e", "182.92.12.11:123", "NTP host")//这里可以更改182.92.12.11为任何授时服务器 flag.Parse()

text
复制代码
conn, err := net.Dial("udp", host) if err != nil { return time.Time{}, err } defer func(conn net.Conn) { err := conn.Close() if err != nil { } }(conn) if err := conn.SetDeadline(time.Now().Add(15 * time.Second)); err != nil { return time.Time{}, err } req := &packet{Settings: 0x1B} if err := binary.Write(conn, binary.BigEndian, req); err != nil { return time.Time{}, err } rsp := &packet{} if err := binary.Read(conn, binary.BigEndian, rsp); err != nil { return time.Time{}, err } secs := float64(rsp.TxTimeSec) - ntpEpochOffset nanos := (int64(rsp.TxTimeFrac) * 1e9) >> 32 showtime := time.Unix(int64(secs), nanos) return showtime, err

}

0个评论
点击登录,快来和大家讨论吧~
表情
图片
暂无评论
蓝色紫纹守宫
下载 APP