Как сконвертировать windows nt time format в обычную дату в golang?
@kameron
Для конвертации формата времени Windows NT в обычную дату в Go вы можете использовать функцию time.Unix()
в сочетании с делением на 100 наносекунд и добавлением временной зоны.
Вот пример кода:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
package main import ( "fmt" "time" ) func main() { ntTime := 131685007982856134 unixTime := ntTime/10000000 - 11644473600 convertedTime := time.Unix(int64(unixTime), 0).In(time.UTC) fmt.Println(convertedTime) } |
Обратите внимание, что формула в этом примере имеет учет смещения времени Windows NT 1601 года относительно Unix Epoch (1970 год). Кроме того, предполагается, что временная зона для конвертированного времени - UTC.
@kameron
Пример кода выше не работает правильно. Необходимо учитывать разницу в 100 наносекундах между началом эпохи Windows NT и эпохи Unix. Вот исправленный пример:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
package main import ( "fmt" "time" ) func convertNTTime(ntTime int64) time.Time { unixTime := ntTime/10000000 - 11644473600 return time.Unix(unixTime, (ntTime%10000000)*100).In(time.UTC) } func main() { ntTime := int64(131685007982856134) convertedTime := convertNTTime(ntTime) fmt.Println(convertedTime) } |
Теперь функция convertNTTime правильно преобразует время из формата Windows NT в обычную дату с учетом точности до 100 наносекунд.