我想找到一种方法来列出UNIX中当前一周的所有日期。例如,如果今天是17-07-2018,那么如何得到整个星期的16-07,18-07,19-07等约会?例如,昨天,后天,后天等等,我不能使用-日期/d选项与日期命令,因为GNU没有安装。是否还有其他命令或用户定义的函数来获取给定日期(当前日期或任何日期)的所有日期?
发布于 2018-07-15 21:14:48
假设您的date在小时内识别TZ偏移,则此操作适用于当前日期:
#!/bin/sh
case $(date +%A) in
(Monday) off=" +0 -24 -48 -72 -96 -120 -144";;
(Tuesday) off=" +24 +0 -24 -48 -72 -96 -120";;
(Wednesday) off=" +48 +24 +0 -24 -48 -72 -96";;
(Thursday) off=" +72 +48 +24 +0 -24 -48 -72";;
(Friday) off=" +96 +72 +48 +24 +0 -24 -48";;
(Saturday) off="+120 +96 +72 +48 +24 +0 -24";;
(Sunday) off="+144 +120 +96 +72 +48 +24 +0";;
esac
for o in $off; do
TZ="$o" date +%d-%m
done样本运行:
$ date
Sun Jul 15 23:13:43 CEST 2018
$ ./x.sh
09-07
10-07
11-07
12-07
13-07
14-07
15-07这与闰年(以下/溢出)无关,因为它使用了date的内置知识。
PS:我刚刚发现我的date (在FreeBSD上)从UTC获取这些偏移,而不是系统时区;您应该在AIX中研究这个问题,如果是这样的话,根据本地时区偏移量调整偏移量到UTC。
发布于 2018-07-17 10:19:29
现在,我认为它需要GNU!date或一些实际的编程语言。例如Perl。
#!/usr/bin/perl
use strict;
use POSIX;
my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst);
my ($w,$ts);
($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = gmtime();
$ENV{'TZ'}='GMT';
POSIX::tzset ();
$ts = POSIX::mktime (0, 0, 0, $mday, $mon, $year);
$ts = $ts - 24*60*60 * $wday;
for ($w= 1; $w<=7; ++$w) {
($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) =
gmtime($ts + (24*60*60)*$w);
printf ("%04d-%02d-%02dn", $year+1900, $mon+1, $mday);
}如果将其保存为$HOME/bin/workdays.pl,则可以在脚本中使用它:
set $(perl ~/bin/weekdays.pl)
echo "Monday is $1"https://stackoverflow.com/questions/51351699
复制相似问题