【问题标题】:How to generate random date in Go lang? [closed]如何在 Go 语言中生成随机日期? [关闭]
【发布时间】:2017-09-15 16:25:07
【问题描述】:
time.Date(2009, 11, 17, 20, 34, 58, 651387237, time.UTC)

上面的代码给了我们一个时间戳,但是,如果我只想分别获取日期部分和时间部分怎么办?可以使用 split() 吗?

【问题讨论】:

  • " 从这个时间戳过滤这个时间" 是什么意思?您想从time.Time 值中取回数字651387237?什么随机日期?在什么范围内?
  • @icza 我想获得一个随机日期,比如 2009 年 5 月 22 日。我该如何获得?
  • 您希望随机日期的范围是多少?最小和最大日期?

标签: date go time


【解决方案1】:

您可以使用math/rand 生成这样的随机日期:

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

func randate() time.Time {
    min := time.Date(1970, 1, 0, 0, 0, 0, 0, time.UTC).Unix()
    max := time.Date(2070, 1, 0, 0, 0, 0, 0, time.UTC).Unix()
    delta := max - min

    sec := rand.Int63n(delta) + min
    return time.Unix(sec, 0)
}

https://play.golang.org/p/x1CK6nIO-v

【讨论】:

  • 这是一种可接受的随机日期生成方式,不应被标记。
  • 它有效,但分布不均。例如。 3 月 1 日的出现频率会比它应该出现的要多得多。即使您做了明显的修复,将月份中的日期限制为有效数字,您也只需更改错误的分布,二月份的日期就会被选择得比他们应该的要多。
  • 好点@JamesAntill 我已经更新了我的答案,但为了我的辩护,我不打算在不了解更多问题的情况下提供一个完整的解决方案,我打算做的就是指出math/rand 可以用于诸如随机日期之类的东西,这是否是 OP 正在寻找的东西,我不知道。
猜你喜欢
  • 2018-06-19
  • 1970-01-01
  • 2020-11-19
  • 2022-01-23
  • 2014-02-25
  • 2014-07-08
  • 2011-09-05
  • 1970-01-01
相关资源
最近更新 更多