英文:
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())
}
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论