将日期格式从9/15/12转换为255 in perl

时间:2012-09-07 17:43:07

标签: perl

我想知道是否有人可以告诉我如何将9/15/12转换为255格式。 来自getdate数组的php中的东西你可以得到ydate。

6 个答案:

答案 0 :(得分:3)

我想你问的是如何获得日期的1 <= yday <= 366天代表,类似于php yday中的getdate()。正如PERL中常见的那样,有多种方法可以做到这一点。最简单的机制是在今天的日期使用localtime()

my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(time);

如果你想在不同的日期做这件事,我可能会使用TimeDate CPAN module

use Date::Parse;

print time2str("%j",str2time("9/15/2012"));

答案 1 :(得分:2)

我认为Tawnos提到来自yday的php getdate()是目标。这是一个选项(假设2012年是您日期字符串中的年份):

use strict;
use warnings;
use Date::Calc qw/Day_of_Year/;

my $date = '9/15/12';
my ( $month, $day, $year ) = split '/', $date;
my $doy = Day_of_Year( "20$year", $month, $day ) - 1;

print $doy; # (0 - 365)

输出:

258

答案 2 :(得分:2)

你想要一年中的哪一天吗?不过,这将是第258天(从0开始)或第259天(从1开始)。仅使用核心Perl:

use Time::Local qw( timegm );
my $date = '9/15/12';
my ($m,$d,$y) = split(qr{/}, $date);
my $epoch = timegm(0,0,0, $d,$m-1,$y);
my $yday = ( gmtime($epoch) )[7];   # 258 (0-based index)

请注意,无论日期时区如何,timegm + gmtime都适用。

答案 3 :(得分:1)

您只能使用核心模块strftime中的功能POSIX

use strict;
use POSIX qw(strftime);

print strftime "%j", localtime(time);

答案 4 :(得分:1)

这是另一种方式,使用核心模块Time::Piece

#!/usr/bin/env perl
use strict;
use warnings;
use Time::Piece;
my $t = Time::Piece->strptime(shift,"%m/%d/%y");
print $t->yday, "\n";

日输出为零相对:1月01 = 0。

答案 5 :(得分:1)

my $dt = '9/15/2012';
my ( $m, $d, $y ) = split( '/', $dt );
my $t = POSIX::mktime( 0, 0, 0, $d, $m - 1, $y - 1900 );
say [ localtime $t ]->[7] - 3;

Julian日期(减1)是从localtimegmtime返回的列表中的第7行。 为什么减3?我不知道; 9月15日是259 Julian。它仍然执行功能映射'9/15/2012'到255.