如何在bash脚本中给定日期参数获得一个月内的第二个星期日

如何在bash脚本中给定日期参数获得一个月内的第二个星期日,bash,shell,Bash,Shell,我试图编写一个bash脚本,在给定的一天内合并24个文件。需求在白天改变,节省时间,我得到23或25个文件 因此,通过进一步的研究,我意识到日光节约从每年3月23日的第二个星期日开始,到11月25日的第一个星期日结束 我需要更多的输入来获取给定月份的第二个星期日,以便分别查找3月和11月的23个或25个文件 如果您能提供任何帮助,我将不胜感激 多谢各位 下面是一天内查找24个文件的示例代码- if [ -z "$1" ];then now=$(date -d "-1 days" +%Y-%m-%

我试图编写一个bash脚本,在给定的一天内合并24个文件。需求在白天改变,节省时间,我得到23或25个文件

因此,通过进一步的研究,我意识到日光节约从每年3月23日的第二个星期日开始,到11月25日的第一个星期日结束

我需要更多的输入来获取给定月份的第二个星期日,以便分别查找3月和11月的23个或25个文件

如果您能提供任何帮助,我将不胜感激

多谢各位

下面是一天内查找24个文件的示例代码-

if [ -z "$1" ];then
now=$(date -d "-1 days" +%Y-%m-%d);
else now=$1;
fi
load_date='load_date='$now
singlePath="$newPath/$load_date"
fileCount=$(hdfs dfs -ls -R  $hdfsPath/$load_date/ | grep -E '^-' | wc -l)
path=$hdfsPath/$load_date
if [ $fileCount -eq 24 ]; then
echo "All files are available for "$load_date;
hadoop fs -cat $path/* | hadoop fs -put - $singlePath/messages.txt
else echo $fileCount" files are available for "$load_date"! Please note, few files are being missed";
fi 

我不会硬编码DST传输的日期。我会数一数“今天有多少小时”:

  • “正常”的一天:

  • “向前冲”

  • “后退”


  • 需要注意的一点是:由于bash只进行整数运算,如果差值不是86400而是86399,则得到:

    $ echo $((86399 / 3600))
    23
    
    因此,最好先查询昨天的时间,因为在两次约会通话之间,秒数滴答作响的可能性很小,但不是零:

    diff=$(( -$(date -d yesterday +%s) + $(date -d now +%s) ))
    
    这里,$diff将是86400或86401(对于非DST过渡日),除以3600将得到24而不是23。

    使用
    diff=$((($(日期-d昨天+%s)+$(日期-d现在+%s)))
    approach如果在午夜前1秒运行脚本时秒数滴答滴答地过去,您仍然会遇到问题,因为如果您在4/27日晚上11:59:59开始运行脚本,“昨天”可能是4/26,但第二秒滴答滴答地过去,而“现在”则是4/28。只要在
    diff
    中对
    date
    的两次调用中都使用一个特定的日期,那么两次调用之间的秒数是否有变化并不重要。e、 g.
    tgt=$(日期+'%F');差异=$($(日期-d“$tgt+1天”+'%s')-$(日期-d“$tgt”+'%s'))
    $ diff=$(( $(date -d "2019-11-03 23:59:59" +%s) - $(date -d "2019-11-02 23:59:59" +%s) ))
    $ echo $(( diff / 3600 ))
    25
    
    $ echo $((86399 / 3600))
    23
    
    diff=$(( -$(date -d yesterday +%s) + $(date -d now +%s) ))