需要在shell中拆分“date”命令输出

时间:2015-12-24 14:08:28

标签: linux shell

我想分割日期命令输出并提取时区差异,并用30分钟表示时差。 我试过这个:

date -R | awk 'NF>1{print $NF}'

我得到了输出-0530 这意味着与GMT有5小时30分钟的差异。现在我想将-0530转换为-11。那么我应该在shell命令中使用什么逻辑?

4 个答案:

答案 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似乎只是奇怪。