2014-01-21 111 views
1

我是Shell脚本的新手。Shell脚本在Linux中获取日期

我想编写一个脚本来获取从格式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 
+0

您的预期输入/输出似乎不一致。你对_周期的定义是什么,即什么时候根据你开始一个星期? – devnull

+1

可能的重复[如何让bash日期脚本返回相对于非当前时间的星期几?](http://stackoverflow.com/questions/9203747/how-do-i-get- (bash-date-script-to-return-a-day-of-the-week-relative-to-a-non)) – fedorqui

+0

上周的星期二和星期五或最近的星期二和星期五? – Alfe

回答

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"来计算新的日期。

1

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); 
0

溶液使用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