在Go中生成随机时间戳

huangapple go评论72阅读模式
英文:

Generating Random Timestamps in Go

问题

我想生成一个在过去的三年内随机的时间戳,并以%d/%b/%Y:%H:%M:%S %z的格式打印出来。

以下是我目前的代码:

package main

import (
	"strconv"
	"time"
	"math/rand"
	"fmt"
)

func randomTimestamp() time.Time {
	randomTime := rand.Int63n(time.Now().Unix() - 94608000) + 94608000

	randomNow, err := time.Parse("10/Oct/2000:13:55:36 -0700", strconv.FormatInt(randomTime, 10))
	if err != nil {
		panic(err)
	}

	return randomNow
}

func main() {
	fmt.Println(randomTimestamp().String())
}

这段代码总是报错:panic: parsing time "...":month out of range。我该如何生成给定范围内的随机时间戳,并使用标准库将其转换为我想要的字符串格式?

英文:

I'd like to generate a random timestamp within the last relative 3 years and have it be printed out with this format: %d/%b/%Y:%H:%M:%S %z

Here is what I have right now:

package main

import (
	"strconv"
	"time"
	"math/rand"
	"fmt"
)

func randomTimestamp() time.Time {
	randomTime := rand.Int63n(time.Now().Unix() - 94608000) + 94608000

	randomNow, err := time.Parse("10/Oct/2000:13:55:36 -0700", strconv.FormatInt(randomTime, 10))
	if err != nil {
		panic(err)
	}

	return randomNow
}

func main() {
	fmt.Println(randomTimestamp().String())
}

This always throws: panic: parsing time "...": month out of range. How can I generate a random timestamp for a given range, then convert it to the string format I want with the standard library?

答案1

得分: 3

不要使用time.Parse。你有一个Unix时间,而不是时间字符串。使用Unix()方法代替。https://golang.org/pkg/time/#Unix。你还可以选择一个最小的时间值,比如1900年1月1日,并使用Time的Add方法和使用Ticks()方法创建的Duration来给时间添加一个随机的秒数。https://golang.org/pkg/time/#Duration

这是一个Go Playground的链接。请记住,Go Playground不支持真正的随机性。https://play.golang.org/p/qYTpnbml_N

package main

import (
    "time"
    "math/rand"
    "fmt"
)

func randomTimestamp() time.Time {
    randomTime := rand.Int63n(time.Now().Unix() - 94608000) + 94608000

    randomNow := time.Unix(randomTime, 0)

    return randomNow
}

func main() {
    fmt.Println(randomTimestamp().String())
}
英文:

Don't use time.Parse. You have a Unix time, not a time string. Use the Unix() method instead. https://golang.org/pkg/time/#Unix. You can also choose a minimum time value, say 1/1/1900 and add a random Duration of seconds to the time using the Add method on Time and passing a Duration you made with the Ticks() method. https://golang.org/pkg/time/#Duration

Here's a Go Playground link. Just remember that the Go Playground doesn't support actual randomness. https://play.golang.org/p/qYTpnbml_N

package main

import (
    "time"
    "math/rand"
    "fmt"
)

func randomTimestamp() time.Time {
    randomTime := rand.Int63n(time.Now().Unix() - 94608000) + 94608000

    randomNow := time.Unix(randomTime, 0)

    return randomNow
}

func main() {
    fmt.Println(randomTimestamp().String())
}

huangapple
  • 本文由 发表于 2016年12月3日 12:29:31
  • 转载请务必保留本文链接:https://go.coder-hub.com/40944233.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定