I think I have discovered a bug in hdate. I am attempting to develope a
script that needs to convert a Gregorian birth date to a Hebrew birth date
then then schedule an event to happen on this years current Hebrew
birthday. The problem is that at/cron does not recognize a Hebrew date so
the birth date must then be converted back into a Gregorian date to
schedule the job.
According to the man page Adar I and Adar II are to be numbered 13 and
14 respectively, and years over 3000 are interpreted as Hebrew dates.
But when the script passes a 13 or a 14 back into hdate it errors out.
The section of the script that fails
#!/bin/bash
# Temporary Variables for testing purposes
BDay=17
BMonth=3
BYear=2005
# Note there are a lot of debugging echo's in this
#step 1 convert Gregorian birthday to Hebrew birthday
HBDate=`hdate -q ${BDay} ${BMonth} ${BYear}`
# returns
# "a blank line"
#Friday, 17 September 1965, 20 Elul 5725
echo " #1 $HBDate"
#step 2 separate output from above into the variables
# HBDay = Hebrew Birth Day
# HMonth = Hebrew Month
# HBYear = Hebrew Birth Year
HBlocData=`echo ${HBDate} | awk -F"," '{printf("%s",$3)}'`
echo "$HBlocData"
if [ -n "`echo ${HBlocData} | awk 'NF == 4'`" ]; then
HBDay=`echo ${HBlocData} | awk -F" " '{printf("%s",$1)}'`;
HMonth=`echo ${HBlocData} | awk -F" " '{printf("%s %s",$2,$3)}'` ;
HBYear=`echo ${HBlocData} | awk -F" " '{printf("%s",$4)}'` ;
elif [ -n "`echo ${HBlocData} | awk 'NF == 3'`" ]; then
HBDay=`echo ${HBlocData} | awk -F" " '{printf("%s",$1)}'` ;
HMonth=`echo ${HBlocData} | awk -F" " '{printf("%s",$2)}'` ;
HBYear=`echo ${HBlocData} | awk -F" " '{printf("%s",$3)}'` ;
fi
echo "#2 $HBDay"
echo "$HMonth"
echo "$HBYear"
set -x
#step 3 populate the HBMonth variable
# HBMonth = Hebrew Birth Month
case ${HMonth} in
Nisan)
HBMonth="7"
;;
Iyar)
HBMonth="8"
;;
Sivan)
HBMonth="9"
;;
Tammuz)
HBMonth="10"
;;
Av)
HBMonth="11"
;;
Elul)
HBMonth="12"
;;
Tishrei)
HBMonth="1"
;;
Cheshvan)
HBMonth="2"
;;
Kislev)
HBMonth="3"
;;
Tevet)
HBMonth="4"
;;
"Sh'vat")
HBMonth="5"
;;
Adar)
HBMonth="6"
;;
"Adar I")
HBMonth="13"
;;
"Adar II")
HBMonth="14"
;;
*)
echo "Invalid Month"
exit
;;
esac
echo "#3 $HBDay $HBMonth $HBYear"
set +x
#step 4 Get the current Hebrew year
# CHYear = Current Hebrew Year
HBCDate=`hdate -q --not-sunset-aware`
HBDateData=`echo ${HBCDate} | awk -F"," '{printf("%s",$3)}'`
if [ -n "`echo ${HBDateData} | awk 'NF == 4'`" ] ; then
CHYear=`echo ${HBDateData} | awk -F" " '{printf("%s",$4)}'`;
elif [ -n "`echo ${HBDateData} | awk 'NF == 3'`" ] ; then
CHYear=`echo ${HBDateData} | awk -F" " '{printf("%s",$3)}'`;
fi
echo "#4 $HBDay $HBMonth $CHYear"
#step 5 Convert this years Hebrew Birthday back to the Gregorian
calendar day
#SNDate=`hdate -q ${HBDay} ${HBMonth} ${CHYear}`
CSNDate=`hdate -q ${HBDay} ${HBMonth} ${CHYear}`
CSNData=`echo ${CSNDate} | awk -F"," '{printf("%s",$2)}'`
SNDay=`echo ${CSNData} | awk -F"," '{printf("%s",$1)}' | sed s/\ //g`
SNMonth=`echo ${CSNData} | awk -F"," '{printf("%s",$2)}' | sed s/\ //g`;
SNYear=`echo ${CSNData} | awk -F"," '{printf("%s",$3)}' | sed s/\ //g`;
echo "#5 ${SNDay} ${SNMonth} ${SNYear}"
exit 0 |