我在我的UNX脚本中传递Julian日期值作为参数。根据日期值,它将转换为常规日期。但是,约束是目前我只能将其转换为当前或以前的日期。以下是我的代码
PARAM_NAME=$1
PARAM_VALUE=$2 //where Julian date is passed
if [[ $PARAM_NAME == 'LOANS_BATCH_CONTROL_PS.ISLFILE_PROCESSING_DATE' && $PARAM_VALUE == `TZ=aaa24 date +%y%j` ]]; then
date_replace_string=`TZ=aaa24 date +%m%d%Y`
PARAM_VALUE=$date_replace_string
我想知道是否有任何地方我可以将此paramter_value与任何日期值(julian日期:例如16074)并将其转换为常规日期而不仅仅是当前日期或前一天日期
答案 0 :(得分:1)
答案 1 :(得分:0)
你可以用GNU-date,sg做数学运算。像这样:
#!/bin/sh
DATE=gdate
jul7_to_std () {
local Y=${1%???}
local j=${1#????}
local j_1=$(expr $j - 1)
local jan1=${Y}0101
$DATE '+%Y%m%d' -d "$jan1 +$j_1 days"
}
jul5_to_std () {
jul7_to_std 20$1
}
jul7_plus () {
local dstd="$(jul7_to_std $1)"
local dtmp="$dstd"
if [ $2 -gt 0 ]; then
dtmp=$($DATE '+%Y%m%d' -d "$dstd +$2 days")
elif [ $2 -lt 0 ]; then
dtmp=$($DATE '+%Y%m%d' -d "$dstd $2 days")
fi
$DATE '+%Y%j' -d "$dtmp"
}
jul5_plus () {
local tmp="$(jul7_plus "20$1" "$2")"
echo "${tmp#??}"
}
jul5_plus 16001 365
jul5_plus 15123 1
jul5_plus 16100 -200
答案 2 :(得分:0)
我不太了解AIX。如果您的Perl发行版是相对最新的,您可以这样做:
perl -MTime::Piece -sle '
$t = Time::Piece->strptime($date,"%y%j");
print $t->strftime("%Y-%m-%d")
' -- -date="16074"
2016-03-14
Time::Piece是一个核心Perl模块,但我不记得哪个perl版本引入了它。