将int64(从UnixNano)转换为位置时间字符串

时间:2017-08-14 17:06:02

标签: string go time

我有一个类似的int64:

  

1502712864232

这是对服务进行REST GET的结果。我可以很容易地将它转换为字符串。这是一个Unixnano时间戳。

我真正需要的是将其转换为字符串,该字符与"欧洲/伦敦"等时区相关。如: -

  

" 14/08 / 2017,13:14:24"

例如由这个方便的实用程序生成: http://www.freeformatter.com/epoch-timestamp-to-date-converter.html

非常感谢任何帮助。

==>更新

感谢@evanmcdonnal提供了这样一个有用的答案。非常感激。 事实证明,我所拥有的数据根本不是UnixNano(对不起),距离Epoch只有几毫秒。来源是詹金斯时间戳......

所以...我编写了以下帮助函数来获得我需要的东西:

// Arg 1 is an int64 representing the millis since Epoch
// Arg 2 is a timezome. Eg: "Europe/London"
// Arg 3 is an int relating to the formatting of the returned string
// Needs the time package. Obviously.

func getFormattedTimeFromEpochMillis(z int64, zone string, style int) string {
    var x string
    secondsSinceEpoch := z / 1000
    unixTime := time.Unix(secondsSinceEpoch, 0)
    timeZoneLocation, err := time.LoadLocation(zone)
    if err != nil {
        fmt.Println("Error loading timezone:", err)
    }

    timeInZone := unixTime.In(timeZoneLocation)

    switch style {
        case 1:
            timeInZoneStyleOne := timeInZone.Format("Mon Jan 2 15:04:05")
            //Mon Aug 14 13:36:02
            return timeInZoneStyleOne
        case 2:
            timeInZoneStyleTwo := timeInZone.Format("02-01-2006 15:04:05")
            //14-08-2017 13:36:02
            return timeInZoneStyleTwo
        case 3:
            timeInZoneStyleThree := timeInZone.Format("2006-02-01 15:04:05")
            //2017-14-08 13:36:02
            return timeInZoneStyleThree
    }
    return x
}

1 个答案:

答案 0 :(得分:5)

不是将其转换为字符串,而是将其转换为time.Time并从那里转换为字符串。您可以使用方便的Unix方法获取该时间戳的Time对象。

import "time"
import "fmt"

t := time.Unix(0, 1502712864232)
fmt.Println(t.Format("02/01/2006, 15:04:05"))

编辑:为println添加格式 - 注意,在go操场中测试你的unix标记,该值既不是纳秒也不是秒,在这两种情况下,产生的时间值都偏离它应该是的。上面的代码仍然展示了你想要做什么的基本思路,但似乎还需要一个额外的步骤,或者你给出的样本int64与你提供的字符串不对应。

相关文档:

https://golang.org/pkg/time/#Unix

https://golang.org/pkg/fmt/