当前位置: 动力学知识库 > 问答 > 编程问答 >

Generating Random Timestamps in Go

问题描述:

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?

网友答案:

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())
}
分享给朋友:
您可能感兴趣的文章:
随机阅读: