如何将addhour用于自定义日期?

时间:2016-05-25 06:29:28

标签: bash date

我有来自conf文件的字符串(让我们调用例如date1):

#!/bin/bash
# it is example
date1="201605250925"

datenow="$(date +%Y%m%d%H%M -d "+1hour")"

date2=$(date +%Y%m%d%H%M -d "$date1 + 1hour")
# NOT WORK?
echo "$date1 --> $date2"
# WORK!
echo "$date1 --> $datenow"

我需要加1个小时。但是得到这样的错误:

date: invalid date `201605250925 + 1hour'

但它对datenow的工作。

如何在字符串中为用户自定义日期格式添加时间?

2 个答案:

答案 0 :(得分:2)

您需要一种符合命令date期望的格式,例如:

2016-05-25 09:25

空格表示时间的开始,时间格式为HH:MM 这来自于international ISO 8601,但使用的是空格而不是T。

如果格式是固定的,我们可以使用bash内部容量(除了使用的日期之外没有外部命令)来改变它:

#!/bin/bash
d1="201605250925"

dc="${d1:0:8} ${d1:8:2}:${d1:10:2}+0"
d2=$(date +'%Y%m%d %H:%M' -ud "$dc + 1 hour" )
echo "$d2"

POSIX ly(破折号),无需调用sed,awk或cut(更快):

#!/bin/dash
d1="201605250925"

dt=${d1##????????}

dc="${d1%%"$dt"} ${dt%%??}:${dt##??}+0"
d2=$(date -ud "$dc + 1 hour" +'%Y%m%d %H:%M')
echo "$d2"
20160525 10:25

+0之后的dc 20160525 09:25+0包含date 将确保-u将解释偏移0(UTC)的时间。

迄今为止使用选项 <%@ page contentType="text/html; charset=UTF-8"%> <%@ taglib prefix="s" uri="/struts-tags"%> <%@ taglib prefix="sx" uri="/struts-dojo-tags"%> <sx:head/> <sx:a href="www.google.com"> Email Link</sx:a> 将确保以UTC读取的值也会以UTC格式更改,从而避免任何日光校正或本地时间更改。

答案 1 :(得分:2)

如果您希望保持与输入字符串相同的格式,可以使用cutsed将其拆分:

<强> cut

d1="201605250925"
ds=$(echo $d1 | cut --output-delimiter=" " -c 1-8,9-12); \
d2=$(date '+%Y%m%d%H%M' -ud "$ds + 1hour") 

<强> sed

d1="201605250925"
ds=$(echo $d1 | sed 's/\(.*\)\(....\)$/\1 \2/g'); \
d2=$(date '+%Y%m%d%H%M' -ud "$ds + 1hour")

这样 date 实用程序就可以了解日期和时间。

<强>结果:

$ echo $d2
201605251025