我是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
我是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
尝试以下方法:
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"
来计算新的日期。
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);
甲python溶液使用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
您的预期输入/输出似乎不一致。你对_周期的定义是什么,即什么时候根据你开始一个星期? – devnull
可能的重复[如何让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
上周的星期二和星期五或最近的星期二和星期五? – Alfe