Подтвердить что ты не робот

Как разобрать метку времени Unix со временем. Время

Я пытаюсь проанализировать метку времени Unix, но я выхожу из диапазона ошибок. Это на самом деле не имеет смысла для меня, потому что макет правильный (как в документах Go):

package main

import "fmt"
import "time"

func main() {
    tm, err := time.Parse("1136239445", "1405544146")
    if err != nil{
        panic(err)
    }

    fmt.Println(tm)
}

Детская площадка

4b9b3361

Ответ 1

Функция time.Parse не выполняет отметки времени Unix. Вместо этого вы можете использовать strconv.ParseInt для синтаксического анализа строки в int64 и создать метку времени с помощью time.Unix:

package main

import (
    "fmt"
    "time"
    "strconv"
)

func main() {
    i, err := strconv.ParseInt("1405544146", 10, 64)
    if err != nil {
        panic(err)
    }
    tm := time.Unix(i, 0)
    fmt.Println(tm)
}

Вывод:

2014-07-16 20:55:46 +0000 UTC

Игровая площадка: http://play.golang.org/p/v_j6UIro7a

Edit:

Изменено от strconv.Atoi до strconv.ParseInt, чтобы избежать переполнения int в 32-разрядных системах.

Ответ 2

Вы можете напрямую использовать функцию time.Unix time, которая преобразует метку времени Unix в UTC

package main

import (
  "fmt"
  "time"
)


func main() {
    unixTimeUTC:=time.Unix(1405544146, 0) //gives unix time stamp in utc 

    unitTimeInRFC3339 :=unixTimeUTC.Format(time.RFC3339) // converts utc time to RFC3339 format

    fmt.Println("unix time stamp in UTC :--->",unixTimeUTC)
    fmt.Println("unix time stamp in unitTimeInRFC3339 format :->",unitTimeInRFC3339)
}

Выход

unix time stamp in UTC :---> 2014-07-16 20:55:46 +0000 UTC
unix time stamp in unitTimeInRFC3339 format :----> 2014-07-16T20:55:46Z

Проверьте на Go Playground: https://play.golang.org/p/5FtRdnkxAd

Ответ 3

Совместное использование нескольких функций, которые я создал для дат:

Обратите внимание, что я хотел получить время для определенного места (а не только время UTC). Если вы хотите время UTC, просто удалите переменную loc и вызов функции .In(loc).

func GetTimeStamp() string {
     loc, _ := time.LoadLocation("America/Los_Angeles")
     t := time.Now().In(loc)
     return t.Format("20060102150405")
}
func GetTodaysDate() string {
    loc, _ := time.LoadLocation("America/Los_Angeles")
    current_time := time.Now().In(loc)
    return current_time.Format("2006-01-02")
}

func GetTodaysDateTime() string {
    loc, _ := time.LoadLocation("America/Los_Angeles")
    current_time := time.Now().In(loc)
    return current_time.Format("2006-01-02 15:04:05")
}

func GetTodaysDateTimeFormatted() string {
    loc, _ := time.LoadLocation("America/Los_Angeles")
    current_time := time.Now().In(loc)
    return current_time.Format("Jan 2, 2006 at 3:04 PM")
}

func GetTimeStampFromDate(dtformat string) string {
    form := "Jan 2, 2006 at 3:04 PM"
    t2, _ := time.Parse(form, dtformat)
    return t2.Format("20060102150405")
}

Ответ 4

Согласно документации go, Unix возвращает местное время.

Unix возвращает местное время, соответствующее данному времени Unix

Это означает, что вывод будет зависеть от машины, на которой работает ваш код, что чаще всего является тем, что вам нужно, но иногда вы можете захотеть иметь значение в формате UTC.

Для этого я адаптировал фрагмент, чтобы он возвращал время в UTC:

i, err := strconv.ParseInt("1405544146", 10, 64)
if err != nil {
    panic(err)
}
tm := time.Unix(i, 0)
fmt.Println(tm.UTC())

Это печатает на моей машине (в CEST)

2014-07-16 20:55:46 +0000 UTC

Ответ 6

Просто используйте время.

пример:

package main

import (
    "fmt"
    "time"
)

func main() {
    fromString := "Wed, 6 Sep 2017 10:43:01 +0300"
    t, e := time.Parse("Mon, _2 Jan 2006 15:04:05 -0700", fromString)
    if e != nil {
        fmt.Printf("err: %s\n", e)
    }
    fmt.Printf("UTC time: %v\n", t.UTC())
}

Рабочий пример на play.golang.org.