2016-12-03 114 views
1

我想产生最后的相对3年内随机时间戳,并将它与这种格式打印出来:%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。如何为给定范围生成随机时间戳,然后将其转换为我想要的标准库的字符串格式?

回答

1

请勿使用time.Parse。你有一个Unix时间,而不是时间字符串。改为使用Unix()方法。 https://golang.org/pkg/time/#Unix。您也可以选择一个最小时间值,比如说1/1/1900,然后在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()) 
} 
+0

啊,这就是我搞砸了,谢谢! – mxplusb