【问题标题】:Generate specific date in bash在 bash 中生成特定日期
【发布时间】:2018-02-28 17:24:36
【问题描述】:

您好,我已经写了一些 bash 来生成格式为 YYYYDDMM 的日期。

我知道这并不完美,但最终会是:

生成一个包含 2 个相隔 31 天的日期的范围,并从至少今天 + 一天开始,较早的日期在今年年底结束。格式为 YYYYMMDD

month="$(awk -v min=1 -v max=12 'BEGIN{srand(); print int(min+rand()*(max-min+1))}')"
day="$(awk -v min=1 -v max=31 'BEGIN{srand(); print int(min+rand()*(max-min+1))}')"
year="$(date +%Y)"



if (( "${month}" < 10 )); then
    month_proper="$(echo 0"${month}")"
else
month_proper="$(echo "${month}")"
fi
if (( "${day}" < 10 )); then
    day_proper="$(echo 0"${day}")"

else
day_proper="$(echo "${day}")"
fi



echo month "${month}"
echo month with 0 if smaller than 10 : "${month_proper}"
echo day "${day}"
echo day with 0 smaller than 10 : "${day_proper}"

ok="$(date -d ""$year""${month_proper}""${day_proper}"" +"%Y%m%d")"
echo date with proper format "${ok}"
date -d "$year""${month_proper}""${day_proper}"

我必须向哪个方向扩展此脚本才能获得最终结果?我已经有了日期生成,但是没有检查是否比今天提前一天。

【问题讨论】:

  • 我不明白你的要求。你想要每一对,随机一对,还是什么?脚本的期望输出究竟是什么?
  • month=$(($RANDOM % 12 + 1))day 类似)可能足够随机,无需使用awk
  • 请求的范围总是YYYY1231..yyyy0131,不是吗?你只需要处理“今天”是 12 月 31 日的情况。
  • 而不是生成月份和日期,只需找到距离 12 月 1 日的天数,在 1 和那个之间选择一个随机数,然后使用 GNU 的 date -d "today + 42 days" 将其格式化为日期。自动处理闰年和一切。
  • 是的,我需要满足上述要求的随机日期

标签: bash shell date random


【解决方案1】:

需求几乎精确地指定了范围(从 12 月 31 日到明年 1 月 31 日),所以你可以写

a_fmt=`date -d "tomorrow" +%Y1231`
a_num=`date -d "$a_fmt" +%s`

b_num=$(( a_num + 31 * 24 * 3600 ))
b_fmt=`date -d @$b_num +%Y%m%d`

echo "Range is '$a_fmt'..'$b_fmt'"

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-10-22
    • 2017-06-27
    • 1970-01-01
    • 1970-01-01
    • 2016-12-13
    • 1970-01-01
    • 2020-09-10
    • 1970-01-01
    相关资源
    最近更新 更多