Как сконвертировать windows nt time format в обычную дату в golang?

Пользователь

от kameron , в категории: Golang , 10 месяцев назад

Как сконвертировать windows nt time format в обычную дату в golang?

Facebook Vk Ok Twitter LinkedIn Telegram Whatsapp

2 ответа

Пользователь

от olen.shanahan , 10 месяцев назад

@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.

Пользователь

от brenna , 17 дней назад

@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 наносекунд.