我想分割日期命令输出并提取时区差异,并用30分钟表示时差。 我试过这个:
date -R | awk 'NF>1{print $NF}'
我得到了输出-0530 这意味着与GMT有5小时30分钟的差异。现在我想将-0530转换为-11。那么我应该在shell命令中使用什么逻辑?
答案 0 :(得分:1)
date -R | awk '{tz=$NF;ew=substr(tz,1,1);h=substr(tz,1,3)*2;m=ew substr(tz,4,2)/30;print h + m}'
https://en.wikipedia.org/wiki/ISO_8601#Time_offsets_from_UTC
编辑使用省略的符号
date -R | awk '{tz=$NF;l=length(tz);m=substr(tz,l-1,2)/30;h=substr(tz,l-3,2)*2;ew=l>4?ew=substr(tz,1,1):"+";print (ew h)+(ew m)}'
答案 1 :(得分:1)
无需复杂化。
AnyObject
答案 2 :(得分:0)
我不会,而是使用不同的工具。在perl
模块Time::Piece
中,您有tzoffset
,以秒为单位返回当前时区偏差。
因此:
#!/usr/bin/env perl
use strict;
use warnings;
use Time::Piece;
$ENV{'TZ'}='GMT-6';
my $now = localtime;
#find number of 30m differences;
print $now -> tzoffset / 60 / 30;
您还可以使用strftime
的变体打印根据您的喜好格式化的时间:
print $now -> strftime("%c");
如果需要,可以将其切成一个衬垫:
perl -MTime::Piece 'print localtime -> tzoffset / 60 / 30'
答案 3 :(得分:0)
使用GNU日期,您可以对时间/日期值(UTC)执行数学运算:
<plugin>
<groupId>org.wildfly.plugins</groupId>
<artifactId>wildfly-maven-plugin</artifactId>
<version>1.0.2.Final</version>
</plugin>
$ date -uR -d "now"; date -uR -d "now -60 min"
Sun, 27 Dec 2015 20:34:17 +0000
Sun, 27 Dec 2015 19:34:17 +0000
的时间是-5:30
分钟:
-330
可以在时区进一步移动:
$ date -uR -d "now"; date -uR -d "now -330 min"
Sun, 27 Dec 2015 20:34:55 +0000
Sun, 27 Dec 2015 15:04:55 +0000
这是当地时间(现在)减去5小时30分钟。
然而,什么是-5:30的时区?
我知道India is +5:30而且有一些(很少)places that are +11:00 但我没有找到-5:30和-11:00似乎只是奇怪。