首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >计算随机指定的一天以增加一天的跨度

计算随机指定的一天以增加一天的跨度
EN

Ask Ubuntu用户
提问于 2019-08-16 15:34:53
回答 1查看 73关注 0票数 1

我可以计算出今天+ 28天

代码语言:javascript
复制
$ date -d '28 days'
Fri 13 Sep 2019 11:32:38 PM CST

如何计算一个随机指定的日期来增加28天,说

日期-d "2019-8-8 + 28天“

EN

回答 1

Ask Ubuntu用户

回答已采纳

发布于 2019-08-16 18:30:20

shuf -生成随机排列

为此您可以使用shuf,如下所示:

代码语言:javascript
复制
date -d "$(shuf -n1 -i0-2019)-$(shuf -n1 -i1-12)-$(shuf -n1 -i1-31) + 28 days"

例如,shuf -n1 -i0-2019从一个从02019的数字列表中输出1数字,因此它给出了这个范围内的随机年份。月份(1-12)和日(1-31)也是如此。这种方法有一个问题:例如,“2019-2-31”不是有效日期,date将因出错而失败:

代码语言:javascript
复制
date: invalid date ‘2019-2-31’

--一个变通的循环

您可以使用只有在命令成功时才退出的循环来解决这个问题,并抑制错误消息(通过将stderr重定向到/dev/null):

代码语言:javascript
复制
while :; do
  if date -d "$(shuf -n1 -i0-2019)-$(shuf -n1 -i1-12)-$(shuf -n1 -i1-31) + 28 days"; then
    break
  fi
done 2>/dev/null

示例运行

代码语言:javascript
复制
$ while :;do if date -d "$(shuf -n1 -i0-2019)-$(shuf -n1 -i1-12)-$(shuf -n1 -i1-31)+28days";then break;fi;done 2>/dev/null
Tue Nov 19 00:00:00 CET 1946

用于多个日期的循环

如果要创建许多这些随机日期,请按以下方式更改循环:

代码语言:javascript
复制
i=0
while ((i<3)); do
  if date -d "$(shuf -n1 -i0-2019)-$(shuf -n1 -i1-12)-$(shuf -n1 -i31-31) + 28 days"; then
    ((i++))
  fi
done 2>/dev/null

第2行中的数字(这里我使用了3 )是输出的日期数。

示例运行

代码语言:javascript
复制
$ i=0;while ((i<3));do if date -d "$(shuf -n1 -i0-2019)-$(shuf -n1 -i1-12)-$(shuf -n1 -i31-31)+28days";then ((i++));fi;done 2>/dev/null
Sat Nov 28 00:00:00 LMT 0572
Wed Apr 28 00:00:00 LMT 0771
Sun Nov 28 00:00:00 LMT 0917
票数 2
EN
页面原文内容由Ask Ubuntu提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://askubuntu.com/questions/1166195

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档