如何使用当前时间以当前时间生成具有当前时间的文件

时间:2014-10-31 13:33:00

标签: shell unix awk

如何使用当前时间以及当前时间分钟生成当前日期的文件。

例如,如果时间是date '+%H:%M'(02:28),我想要小时和分钟,如下所示。

Output:
00:00
00:01
00:02
00:03
.
.
.
.
02:28

4 个答案:

答案 0 :(得分:1)

我们在工作中遇到了一个棘手的情况:每年有一天在巴西没有午夜。 00:00是无效的时间。那是因为时钟在午夜向前跳了一个小时。

处理夏令时的一种安全方法是:

perl -MDateTime -E '
    $tz    = DateTime::TimeZone->new(name => "local"); 
    $local = DateTime->now(time_zone => $tz);
    $utc   = $local->clone->set_time_zone("UTC");
    $today = $local->strftime("%F");
    while ($local->strftime("%F") eq $today) {
        say $local->strftime("%H:%M");
        $utc->subtract(minutes => 1);
        $local = $utc->clone->set_time_zone($tz);
    }
' | tac > file

要演示巴西"问题",请尝试此操作并注意当天的第一分钟是01:00

perl -MDateTime -E '
    $tz    = DateTime::TimeZone->new(name => "America/Sao_Paulo"); 
    $local = DateTime->now(time_zone=>$tz)->set(year=>2014, month=>10, day=>19);
    $utc   = $local->clone->set_time_zone("UTC");
    $today = $local->strftime("%F");
    while ($local->strftime("%F") eq $today) {
        say $local->strftime("%H:%M");
        $utc->subtract(minutes => 1);
        $local = $utc->clone->set_time_zone($tz);
    }
' | tac > file

答案 1 :(得分:0)

充分不言自明:

h=`date +%H`
m=`date +%M`
eval printf '%s\\n' "{00..$((h-1))}:{00..59} $h:{00..$m}"

正如glenn所指出的那样,在白天节省的情况下,存在无效时间被记录的问题。 要处理这种情况,可以再次通过date命令传递上述输出。 (慢)

eval printf '%s\\n' "{00..$((h-1))}:{00..59} $h:{00..$m}" | xargs -n1 date "+%H:%M" -d 2>/dev/null

答案 2 :(得分:0)

或者,使用AWK:

BEGIN {
    split(strftime("%H %M"),A,/ /)
    for (H = 0; H < A[1]; H++) {
        for (M = 0; M < 60; M++) {
            printf("%02d:%02d\n", H, M)
        }
    }
    for (M=0; M<A[2]; M++) {
        printf("%02d:%02d\n", H, M)
    }
}

答案 3 :(得分:0)

另一种方式

awk 'BEGIN{i=((x=systime())-x%86400)}{while(x>i){print strftime("%H:%M",i);i+=60}}' <<< ""