【问题标题】:Shell Script to Get Date In Linux在 Linux 中获取日期的 Shell 脚本
【发布时间】:2014-01-21 13:58:24
【问题描述】:

我是 Shell 脚本的新手。

我想编写一个脚本,以 YYYY:MM:DD 格式从用户那里获取任何随机日期,并回显(显示)前一周的星期二和星期五的日期。

例如,如果我将输入日期指定为2013-12-11
输出应该是

date1= 2013-12-06
date2= 2013-12-10

输入日期为2013-12-07

输出

date1= 2013-12-03
date2= 2013-12-06

【问题讨论】:

标签: linux bash shell date scripting


【解决方案1】:

尝试以下方法:

input=2013-12-11
lastTues=$(date -d "$input -$(date -d "$input +5 days" +%u) days" +%Y-%m-%d)
lastFri=$(date -d "$input -$(date -d "$input +2 days" +%u) days" +%Y-%m-%d)

此命令首先计算输入日期与上周二(或周五)之间的天数,调用它X。然后运行date -d "inputDate -X days" 来计算新日期。

【讨论】:

    【解决方案2】:

    Perl 的救援:

    #!/usr/bin/perl
    use warnings;
    use strict;
    
    use DateTime;
    
    sub tuefri {
        my ($year, $month, $day) = split /[^0-9]/, shift;
        my $date = 'DateTime'->new( year  => $year,
                                    month => $month,
                                    day   => $day,
                                  );
        $date->subtract(days => 7);
        my @result;
        until (2 == @result) {
            push @result, $date->ymd if grep $_ == $date->day_of_week, 2, 5;
            $date->add(days => 1);
        }
        return @result
    }
    
    my $i = 1;
    print 'date', $i++, "= $_\n" for tuefri(shift);
    

    【讨论】:

      【解决方案3】:

      使用python-dateutil 模块的 解决方案:

      import fileinput
      from dateutil.relativedelta import TU, FR, relativedelta
      from datetime import date
      
      for line in fileinput.input():
          d = date(*(map(int, line.rstrip().split('-'))))
          print(d + relativedelta(weekday=FR(-1)))
          print(d + relativedelta(weekday=TU(-1)))
      

      像这样运行它:

      python script.py <<<"2013-12-11"
      

      产生:

      2013-12-06
      2013-12-10
      

      【讨论】:

        猜你喜欢
        • 2017-11-14
        • 2023-04-09
        • 1970-01-01
        • 1970-01-01
        • 2021-05-06
        • 2017-04-17
        • 2012-04-17
        • 1970-01-01
        相关资源
        最近更新 更多