【问题标题】:How to create dynamic date with time stamp?如何创建带有时间戳的动态日期?
【发布时间】:2018-07-11 11:26:47
【问题描述】:

我是 linux 新手。 我有以下要求。 让我们说,现在的日期时间是2018-07-11 15:01:23 我想生成新的日期时间戳,它应该等于最接近的小时值,它是8 的乘数。 例如,使用下面的当前日期和时间,结果应如下所示:

startdate = 2018-07-11 00:00:00 &
enddate = 2018-07-11 08:00:00.

如果我当前的日期时间戳是2018-07-12 07:01:11 日期应如下所示:

startdate = 2018-07-11 16:00:00 &
enddate = 2018-07-12 00:00:00.

我想按照上述自动执行日期。 谢谢。

【问题讨论】:

  • 现在似乎工作正常: ftimestamp=$(date +"%Y-%m-%d %H:%M:%S") echo $ftimestamp fhour=$(date + "%H") fminute=$(date +"%M") fsecond=$(date +"%S") echo $fhour echo $fminute echo $fsecond fmodular2=$((fhour%8)) echo $fmodular2 datesec ="$(date '+%s' --date="$ftimestamp")" enddate=$(date --date="@$((datesec - (fmodular2*3600) - (fsecond*1) - (fminute) *60)))" '+%Y-%m-%d %H:%M:%S') echo $enddate startdate=$(date --date="@$((datesec - ((fmodular2+8 )*3600) - (fsecond*1) - (fminute*60)))" '+%Y-%m-%d %H:%M:%S') echo $startdate

标签: linux unix unix-timestamp


【解决方案1】:

我认为您在评论部分所做的工作效率低下,因为它调用 date 命令六次或可能更少。
如果脚本在午夜前的几分之一秒内被调用并且日期在 设置月份和日期?
假设脚本在 2018-04-31 23:59:59 调用,但分配的值可能为 2018-04-01 00:00:00。
想要的日期是 2018 年 4 月 31 日 23:59:59 或 5 月 1 日 00:00:00。
脚本可以得到的是 2018 年 4 月 1 日 00:00:00。那是整整一个月的假期!

更好的方法是从日期中获取单个字符串并将其拆分为多个部分。

date=$(date +%Y-%m-%dT%H:%M:%S)
time=${date#*T}
date=${date%T*}
year=${date%%-*}
daymonth=${date#*-}
month=${daymonth%-*}
day=${daymonth#*-}
hour=${time%%:*}
minsec=${time#*-}
minute=${minsec%-*}
second=${minsec#*-}

现在您可以像在代码的其他部分一样进行计算。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-01
    • 2021-01-14
    • 2010-10-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多