首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在UNIX中操作日期

在UNIX中操作日期
EN

Stack Overflow用户
提问于 2018-07-15 19:48:31
回答 2查看 140关注 0票数 0

我想找到一种方法来列出UNIX中当前一周的所有日期。例如,如果今天是17-07-2018,那么如何得到整个星期的16-07,18-07,19-07等约会?例如,昨天,后天,后天等等,我不能使用-日期/d选项与日期命令,因为GNU没有安装。是否还有其他命令或用户定义的函数来获取给定日期(当前日期或任何日期)的所有日期?

EN

回答 2

Stack Overflow用户

发布于 2018-07-15 21:14:48

假设您的date在小时内识别TZ偏移,则此操作适用于当前日期:

代码语言:javascript
复制
#!/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

样本运行:

代码语言:javascript
复制
$ 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。

票数 1
EN

Stack Overflow用户

发布于 2018-07-17 10:19:29

现在,我认为它需要GNU!date或一些实际的编程语言。例如Perl。

代码语言:javascript
复制
#!/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,则可以在脚本中使用它:

代码语言:javascript
复制
set $(perl ~/bin/weekdays.pl)
echo "Monday is $1"
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51351699

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档