Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Date KSH-检查日期是否为BST/GMT,并执行计算_Date_Unix_Time_Ksh - Fatal编程技术网

Date KSH-检查日期是否为BST/GMT,并执行计算

Date KSH-检查日期是否为BST/GMT,并执行计算,date,unix,time,ksh,Date,Unix,Time,Ksh,我有一个小的KSH,它执行表面上看起来相对简单的功能。传入一个日期(格式为YYYYMMDD),这将检查它是否在BST内。如果它在BST内,则向其添加5小时并分配给“BST_开始_日期”,向“BST_结束_日期”添加29小时。如果没有,则添加6/30小时 例如,如果日期是20150330,您将得到以下结果: BST_START_DATE:2015033005 BST_END_DATE:2015033105 这通常可以正常工作,但时区发生变化的日子除外。使用日期20150328,我希望开始时给出0

我有一个小的KSH,它执行表面上看起来相对简单的功能。传入一个日期(格式为YYYYMMDD),这将检查它是否在BST内。如果它在BST内,则向其添加5小时并分配给“BST_开始_日期”,向“BST_结束_日期”添加29小时。如果没有,则添加6/30小时

例如,如果日期是20150330,您将得到以下结果:

BST_START_DATE:2015033005
BST_END_DATE:2015033105
这通常可以正常工作,但时区发生变化的日子除外。使用日期20150328,我希望开始时给出06(因为它在BST之外),但结束时给出05(因为它在BST之内)。相反,20150328和20150329两个值都返回06,直到20150330它才开始正常工作。我绞尽脑汁想弄明白它有一段时间了,但我对日期函数的复杂性相对不熟悉

代码如下:

P_CB_DATA_DATE=$1

DATE1=${P_CB_DATA_DATE}
DATE2=`date -d "${P_CB_DATA_DATE} +1 day" "+%Y%m%d"`

BST_START=`date +%Y`03`cal 3 \`date +%Y\` | sed -n 's/^\([0-9]\{2\}\).*/\1/p' | tail -1`
BST_END=`date +%Y`10`cal 10 \`date +%Y\` | sed -n 's/^\([0-9]\{2\}\).*/\1/p' | tail -1`

if [[ ${DATE1} -ge ${BST_START} && ${DATE1} -le ${BST_END} ]]
then
export BCD_START_DATE=`date -d "${DATE1} +5 hours" "+%Y%m%d%H"`
echo "START is in BST"
else
export BCD_START_DATE=`date -d "${DATE1} +6 hours" "+%Y%m%d%H"`
echo "START is not in BST"
fi

if [[ ${DATE2} -ge ${BST_START} && ${DATE2} -le ${BST_END} ]]
then
export BCD_END_DATE=`date -d "${DATE1} +29 hours" "+%Y%m%d%H"`
echo "END is in BST"
else
export BCD_END_DATE=`date -d "${DATE1} +30 hours" "+%Y%m%d%H"`
echo "END is not in BST"
fi
谢谢你的帮助

传入一个日期(格式为YYYYMMDD),并进行检查 是否在BST内。如果在BST内,则添加5小时并分配给“BST_开始_日期”,添加29小时分配给“BST_结束_日期”。如果没有,则添加6/30小时

在这里,您表示正在检查传入日期(it)

使用日期20150328,我希望开始时得到06(因为它是 在BST之外),但结束时给出05(因为它在内部)

与第一条语句相反,herefrom(以及您的脚本)可以看到开始和结束分别被检查。你应该更仔细地回答这个问题

相反,对于这两个值,20150328和20150329都返回06

您似乎错过了20150328(0小时)加上29小时的结果,即20150329,实际上是6点钟。所以,你的脚本按照你说的去做。这是否是你真正想要的是另一个故事