# 如何在Perl中将date/时间转换为纪元时间（又名unix time – 1970年以来的秒数）？

### 12 Solutions collect form web for “如何在Perl中将date/时间转换为纪元时间（又名unix time – 1970年以来的秒数）？”

``use Time::Local; timelocal(\$second,\$minute,\$hour,\$day,\$month-1,\$year);` `

` `use Time::Local; sub parsedate { my(\$s) = @_; my(\$year, \$month, \$day, \$hour, \$minute, \$second); if(\$s =~ m{^\s*(\d{1,4})\W*0*(\d{1,2})\W*0*(\d{1,2})\W*0* (\d{0,2})\W*0*(\d{0,2})\W*0*(\d{0,2})}x) { \$year = \$1; \$month = \$2; \$day = \$3; \$hour = \$4; \$minute = \$5; \$second = \$6; \$hour |= 0; \$minute |= 0; \$second |= 0; # defaults. \$year = (\$year<100 ? (\$year<70 ? 2000+\$year : 1900+\$year) : \$year); return timelocal(\$second,\$minute,\$hour,\$day,\$month-1,\$year); } return -1; }` `

` `\$ENV{TZ}="GMT"; POSIX::tzset(); \$time = POSIX::mktime(\$s,\$m,\$h,\$d,\$mo-1,\$y-1900);` `

` `use Date::Manip; \$string = '18-Sep-2008 20:09'; # or a wide range of other date formats \$unix_time = UnixDate( ParseDate(\$string), "%s" );` `

Date :: Manip很大很慢，但parsing非常灵活，而且是纯粹的perl。 如果您在编写代码时很匆忙，可以使用它，并且您知道在运行代码时不会太急。

（感谢下面第一条评论的作者）

`Time::Piece`是Perl 5.9.5的核心

` `my \$t = Time::Piece->strptime("Sunday 3rd Nov, 1943", "%A %drd %b, %Y");` `

` `if ( \$t < time() ) { #do something }` `

` `print \$t,"\n";` `

` `Wed Nov 3 00:00:00 1943` `

CPAN上有许多Date操作模块。 我最喜欢的是DateTime ，你可以使用strptime模块以任意格式parsingdate。 CPAN上还有很多用于处理专用date格式的DateTime :: Format模块，但是strptime是最通用的。

` `EPOCH="`perl -e 'use Time::Local; print timelocal('\${SEC}','\${MIN}','\${HOUR}','\${DAY}','\${MONTH}','\${YEAR}'),\"\n\";'`"` `

` `martind@whitewater:~\$ cat `which isoToEpoch` #!/usr/bin/perl -w use strict; use Time::Piece; # sudo apt-get install libtime-piece-perl while (<>) { # date --iso=s: # 2007-02-15T18:25:42-0800 # Other matched formats: # 2007-02-15 13:50:29 (UTC-0800) # 2007-02-15 13:50:29 (UTC-08:00) s/(\d{4}-\d{2}-\d{2}([T ])\d{2}:\d{2}:\d{2})(?:\.\d+)? ?(?:\(UTC)?([+\-]\d{2})?:?00\)?/Time::Piece->strptime (\$1, "%Y-%m-%d\$2%H:%M:%S")->epoch - (defined (\$3) ? \$3 * 3600 : 0)/eg; print; } martind@whitewater:~\$` `

` `#! /usr/bin/perl -w use strict; \$_ = (join ' ', @ARGV); \$_ ||= <STDIN>; chomp; if (/^[\d.]+\$/) { print scalar localtime \$_; print "\n"; } else { exec "date -d '\$_' +%s"; }` `

` `\$ Time now 1221763842 \$ Time yesterday 1221677444 \$ Time 1221677444 Wed Sep 17 11:50:44 2008 \$ Time '12:30pm jan 4 1987' 536790600 \$ Time '9am 8 weeks ago' 1216915200` `
• 我如何在Mac OS X上运行Perl脚本？
• 在Perl中检查string是否为空的正确方法是什么？
• 将相对path转换为绝对path？
• 如何pipe理你的Perl应用程序的开发，构build和部署？
• 我可以在R中使用一个列表作为散列吗？ 如果是这样，为什么这么慢？
• 如何在Perlreplace运算符的replace侧使用variables？
• 为什么Perl不能find我在ClearCase中的文件？
• 我如何告诉CPAN安装所有的依赖关系？
• 如何包含位于不同目录中的Perl模块？
• “现代”正则表达式的认知力
• 如何在严格的编译指示下将variables设置为NULL？