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

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

от macy.davis , в категории: Общие вопросы , год назад

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

Facebook Vk Ok Twitter LinkedIn Telegram Whatsapp Pocket

2 ответа

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

от modesta , год назад

@macy.davis 

В Go есть пакет time, который предоставляет функцию ParseDuration для анализа значения временного интервала в формате Windows NT и функцию Add для применения этого интервала к определенному времени.


Вот пример кода для конвертации Windows NT-формата в обычную дату:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
package main

import (
    "fmt"
    "time"
)

func main() {
    windowsNTTime := "116444736000000000" // Пример Windows NT-формата

    // Разбор значения временного интервала в формате Windows NT
    duration, err := time.ParseDuration(windowsNTTime + "ns")
    if err != nil {
        fmt.Println("Ошибка при разборе временного интервала:", err)
        return
    }

    // Применение временного интервала к начальной дате
    startTime := time.Date(1601, 1, 1, 0, 0, 0, 0, time.UTC)
    endTime := startTime.Add(duration)

    // Вывод результирующей даты в формате RFC3339
    fmt.Println("Результат:", endTime.Format(time.RFC3339))
}


В этом примере windowsNTTime представляет собой значение временного интервала в формате Windows NT. Здесь мы разбираем его с использованием time.ParseDuration и добавляем полученный интервал к начальной дате (1 января 1601 года в UTC). Затем мы выводим результирующую дату в формате RFC3339.


Примечание: Код приведен для Go версии 1.13 или новее. Если у вас установлена более старая версия Go, вам может потребоваться обновить ее или использовать стороннюю библиотеку, такую как github.com/tmc/dot.

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

от marjorie.goldner , год назад

@macy.davis 

Вот пример кода с использованием сторонней библиотеки для конвертации Windows NT-формата в обычную дату:


1 2 3 4 5 6 7 8 9 10 11 12


package main


import ( "fmt" "github.com/tmc/dot" )


func main() { windowsNTTime := "116444736000000000" // Пример Windows NT-формата

1
2
3
4
5
6
7
8
9
// Конвертация из Windows NT-формата в обычную дату
t, err := dot.FromFiletime(windowsNTTime)
if err != nil {
    fmt.Println("Ошибка при конвертации временного интервала:", err)
    return
}

// Вывод результирующей даты в формате RFC3339
fmt.Println("Результат:", t.Format("2006-01-02 15:04:05"))


}


В этом примере мы используем стороннюю библиотеку "github.com/tmc/dot", которая предоставляет функцию FromFiletime для конвертации значения временного интервала в формате Windows NT в обычную дату. Затем мы выводим результирующую дату в формате "2006-01-02 15:04:05".