我的日期格式如下:datetime = date +%Y%m%d%H%M%S
回复它会给我类似 20180123143852 的内容。
现在我想要从日期起两天的差异,我正在尝试这样
dby_date=`date -d "$datetime - $date_diff " +%Y-%m-%d`
错误输出:
date: invalid date â20180123143852 - 2 â
有任何建议如何以我想要的格式获取
答案 0 :(得分:1)
快速解决方案:
datetime=20180123
date -d "$datetime - $date_diff days" +%Y-%m-%d
# -----------------------------^^^^^^
返回
2018-01-21
请注意,我必须删除时间戳的时间部分,并使用-2 days
进行减法。
如果您需要时间部分,我建议将其保存到单独的变量中,然后将该值附加到输出中。但是,当您更改输出格式时,我觉得时间不重要吗?
IHTH
答案 1 :(得分:0)
如果您希望两个日期之间存在差异,最好以date
知道的格式转换它们。
man date:
--date=STRING
是一种大多数免费格式的人类可读日期字符串 例如" Sun,2004年2月29日16:21:42 -0800"或" 2004-02-29 16:21:42" 甚至"下周四"。日期字符串可能包含指示的项目 日历日期,时间,时区,星期几,相对时间, 相对日期和数字。空字符串表示开头 当天日期字符串格式比容易复杂 在此处记录,但在信息文档中有详细描述。
所以我建议相应地格式化它们(date "+%F %T"
应该这样做)
此外,日期差异无法以日期格式转换,因此您需要进行一些手动操作。
假设您有两种日期格式$date1
和$date2
,现在差异可以获得:
date1="2018-01-23 16:54:16"
date2="2004-02-29 16:21:42"
# Compute difference in seconds
diff=$(( $(date --utc -d "$date1" "+%s") - $(date --utc -d "$date2" "+%s") ))
# compute the separate parts (integer arithmetic)
days=$(( diff/86400 ))
hours=$(( (diff - days*86400)/3600 ))
minutes=$(( (diff - days*86400 - hours*3600)/60 ))
seconds=$(( diff - days*86400 - hours*3600 - minutes*60 ))
# print result
printf "%0.3d days %0.2d hours %0.2d min %0.2d sec\n" $days $hours $minutes $seconds
5077 days 00 hours 32 min 34 sec
或者你可以做到
date1="2018-01-23 16:54:16"
date2="2004-02-29 16:21:42"
# Compute difference in seconds
diff=$(( $(date --utc -d "$date1" "+%s") - $(date --utc -d "$date2" "+%s") ))
echo $(( $diff/86400 ))":"$(date -d @$diff "+%T")
5077:00:32:34
请记住以下内容: