我有来自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
的工作。
如何在字符串中为用户自定义日期格式添加时间?
答案 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)
如果您希望保持与输入字符串相同的格式,可以使用cut
或sed
将其拆分:
<强> 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