time_windows.go 770 B

1234567891011121314151617181920212223242526272829303132
  1. package ntp
  2. import (
  3. "time"
  4. "unsafe"
  5. "golang.org/x/sys/windows"
  6. )
  7. func setSystemTime(nowTime time.Time) error {
  8. var systemTime windows.Systemtime
  9. systemTime.Year = uint16(nowTime.Year())
  10. systemTime.Month = uint16(nowTime.Month())
  11. systemTime.Day = uint16(nowTime.Day())
  12. systemTime.Hour = uint16(nowTime.Hour())
  13. systemTime.Minute = uint16(nowTime.Minute())
  14. systemTime.Second = uint16(nowTime.Second())
  15. systemTime.Milliseconds = uint16(nowTime.UnixMilli() - nowTime.Unix()*1000)
  16. dllKernel32 := windows.NewLazySystemDLL("kernel32.dll")
  17. proc := dllKernel32.NewProc("SetSystemTime")
  18. _, _, err := proc.Call(
  19. uintptr(unsafe.Pointer(&systemTime)),
  20. )
  21. if err != nil && err.Error() != "The operation completed successfully." {
  22. return err
  23. }
  24. return nil
  25. }