2013-08-01 60 views
0

在perl中,我們可以直接得到以下格式給出的時間差異嗎?將絕對時間轉換爲相對時間

要求我必須絕對時間轉換爲相對時間:

輸入:

2013/06/19 05:16:51:209 INFO 
2013/06/19 05:16:54:365 INFO 
2013/06/19 05:16:54:365 INFO 

預期輸出:

000000.000000 INFO 
000003.156000 INFO 
000003.156000 INFO 

所以在這裏我必須採取05:16:51:209作爲參考時間並使它0然後需要下次減去它。

請讓我知道是否有任何相同的功能可用。

+0

如果考慮DST,閏秒,時間不連續性等問題,這是一個非常(非常非常)難以解決的問題。您能否以任何其他方式獲取數據? – OmnipotentEntity

+1

如果不是,您可以使用CPAN模塊DateTime。 http://search.cpan.org/~drolsky/DateTime-1.03/lib/DateTime.pm#How_DateTime_Math_Works – OmnipotentEntity

+0

沒有輸入只有這種格式:( – user381862

回答

0

它是一個非常複雜的問題(我喜歡那個:D)。但我會給你一個解決方案(其沒有完成,但是龐大的你的問題應該被清除):

use DateTime::Format::Strptime; 
my $parser = DateTime::Format::Strptime->new(
    pattern => '%y/%m/%d %H:%M:%S:%N', 
    on_error => 'croak', 
); 

my @dates = (
    '2013/06/19 05:16:51:209 INFO', 
    '2013/06/19 05:16:54:365 INFO', 
    '2013/06/19 05:16:54:365 INFO', 
); 

my %dates; 
$dates{$_} = $parser->parse_datetime($_) foreach @dates; 

我用[DateTime::Format::Strptime]解析日期時間和獲取一個DateTime對象返回。然後你只需要調用datetime模塊的增量方法之一來得到你所需要的:)

這裏有一些鏈接給你:

+0

在這裏,如果我忽略日期和以05:16:51:209作爲輸入,是否有可能在不使用任何perl模塊的情況下獲得差異我只能在這裏使用perl模塊 – user381862

+0

如果你不能使用DateTime perl模塊,你應該通知你的老闆這是一個非常大而複雜的問題,這將需要重新實現它。查看這個SO帖子,你正在處理的複雜性:http://stackoverflow.com/questions/6841333/why-is-subtracting-these-two -1927-giving-a-strange-result/6841479#6841479 – OmnipotentEntity

+0

@ user381862:如果您不能使用任何不在基本Perl分配中的Perl模塊,則可以重寫該模塊的代碼。這並不簡單,但你可以做到它。然而,懶惰是一種美德...爲什麼重新發明輪子(壞)? –