2016-12-03 3 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

時間は使用しないでください。あなたはUnixの時間であり、時間の文字列ではありません。代わりにUnix()メソッドを使用してください。 https://golang.org/pkg/time/#Unix。たとえば、TimeのAddメソッドを使用し、Ticks()メソッドで作成したDurationを使用して、最小時間値、たとえば1/1/1900を選択して、時間に秒数をランダムに追加することもできます。 https://golang.org/pkg/time/#Duration

ここには遊び場のリンクがあります。 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