如何使用当前时间以及当前时间分钟生成当前日期的文件。
例如,如果时间是date '+%H:%M'
(02:28),我想要小时和分钟,如下所示。
Output:
00:00
00:01
00:02
00:03
.
.
.
.
02:28
答案 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}}' <<< ""