| // +build windows,386 |
| |
| package ole |
| |
| import ( |
| "errors" |
| "syscall" |
| "time" |
| "unsafe" |
| ) |
| |
| // GetVariantDate converts COM Variant Time value to Go time.Time. |
| func GetVariantDate(value uint64) (time.Time, error) { |
| var st syscall.Systemtime |
| v1 := uint32(value) |
| v2 := uint32(value >> 32) |
| r, _, _ := procVariantTimeToSystemTime.Call(uintptr(v1), uintptr(v2), uintptr(unsafe.Pointer(&st))) |
| if r != 0 { |
| return time.Date(int(st.Year), time.Month(st.Month), int(st.Day), int(st.Hour), int(st.Minute), int(st.Second), int(st.Milliseconds/1000), time.UTC), nil |
| } |
| return time.Now(), errors.New("Could not convert to time, passing current time.") |
| } |