我想找到一种在UNIX中列出当前星期的所有日期的方法。 例如,如果今天是2018年7月17日,那么如何获取整周的日期16-07、18-07、19-07等?即昨天,明天,后天等。 由于未安装GNU,因此我无法在 date 命令中使用--date / d选项。还有其他命令或用户定义的函数来获取给定的所有日期(当前日期或任何日期)吗?
答案 0 :(得分:2)
假设您的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
This年,下溢/上溢没有问题,因为它使用了date
的内置知识。
PS:我刚刚发现我的date
(在FreeBSD上)采用了UTC的偏移量,而不是系统时区的偏移量。您应该针对AIX对此进行调查,如果是这样,请通过将您的本地时区与UTC的时差进行相应调整。
答案 1 :(得分:1)
好吧,现在我认为它需要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 / weekdays.pl,则可以在脚本中使用它:
set $(perl ~/bin/weekdays.pl)
echo "Monday is $1"