如何通过Zsh/AWK生成工作日08:00-16:00+RAND的一系列时间戳?

如何通过Zsh/AWK生成工作日08:00-16:00+RAND的一系列时间戳?

我正在考虑如何通过 ZSH/AWK/... 生成 2017 年 11 月 11 日至 2017 年 12 月 12 日的一系列时间戳,以便每天从 08:00 开始,到 16:00+RAND 结束。一天的结束应该有一些随机的结局,等等,差异为 30 分钟。预期输出示例

11.11.2017 08:00 - 16:15
12.11.2017 08:00 - 16:03
...
12.12.2017 08:00 - 15:25

操作系统:Debian Stretch

答案1

strftime在模块中使用zsh/datetime将日历时间转换为 Unix 纪元(带有-r)或反向转换。对于随机数生成,您可以$RANDOM使用 in ksh,但这只是一个 15 位整数或rand48()数学函数(在zsh/mathfunc函数中)。

#! /bin/zsh -
start=11.11.2017
end=12.12.2017
TZ=UTC0 # timezone doesn't matter here. We use UTC0 to make sure there's
        # DST/change

zmodload zsh/datetime
zmodload zsh/mathfunc

strftime -rs start_t %d.%m.%Y $start
strftime -rs end_t %d.%m.%Y $end

for ((t = start_t; t <= end_t; t += 24*60*60)) {
  strftime -s weekday %u $t
  if ((weekday < 6)) { # Monday to Friday
    strftime -s s '%d.%m.%Y %H:%M' $((t + 8 * 60*60))
    strftime -s e '%H:%M' $((t + 16*60*60 - 15*60 + int(rand48() * 30*60)))
    print $s - $e
  }
}

相关内容