我有一个类似的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
}
答案 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
与你提供的字符串不对应。
相关文档: