商城首页欢迎来到中国正版软件门户

您的位置: 首页 > 文章列表 > 编程开发 > 讲Perl中的本地时间与UNIX时间戳间相互转换的方法

讲Perl中的本地时间与UNIX时间戳间相互转换的方法

  发布于2026-06-29 阅读(0)

扫一扫,手机访问

在Perl中处理时间信息,其实绕不开两种最基本的表示方式:一种是人类一眼就能看懂的本地时间字符串,比如“Sat Mar 14 10:14:05 EDT 2015”;另一种则是计算机更喜欢的UNIX时间戳——从1970年1月1日零点开始算起的秒数。两种各有优劣,但实际开发中经常需要在它们之间来回切换。下面就来聊聊具体的转换方法,顺便带几个常见的坑。

Perl中转换本地时间到UNIX时间戳

讲Perl中的本地时间与UNIX时间戳间相互转换的方法

如果你手头有一个日期字符串,想拿到对应的UNIX时间戳,最省事的做法是用Date::Parse模块里的str2time()函数。这个函数相当聪明,能自动识别多种常见的时间格式,比如下面这些:

  Sat Mar 14 10:14:05 EDT 2015
  3/14/2015 10:14:05 -0400
  14/Mar/15 10:14:05
  14 Mar 15 10:14:05

  use Date::Parse;
  my $local_time = "Sat Mar 14 10:14:05 EDT 2015";
  # 1426342445 will be stored in $unix_time
  my $unix_time = str2time($local_time);

更贴心的是,Date::Parse还支持多种语言(英语、法语、德语、意大利语等)和不同时区。如果你需要解析法语时间字符串,可以搭配Date::Language模块一起用:

  use Date::Parse;
  use Date::Language;
  my $lang = Date::Language->new('French');
  my $unix_time = $lang->str2time("12:14:05, Ago 16, 2014 (CEST)");

Perl中UNIX时间戳到易读的日期和时间

反过来,想把UNIX时间戳变乘人能看懂的格式,核心工具是Perl内置的localtime()函数。它会把时间戳拆成一个9元素的列表,然后你想组装成什么格式就组装成什么格式。下面这段代码演示了最常见的用法:

  # $sec, $min, $hour: 秒,分,时
  # $mday: 月中的某天 (0-31)
  # $mon: 月份,范围 0 (一月) 至 11 (十二月)
  # $year: 年份,与1900年的差值(2015年为2015-1900=115)
  # $wday: 星期,范围 0 (星期天) 至 6 (星期六)
  # $yday: 年中的某天,范围 0 至 364 (或 365 闰年)
  # $isdst: 是否是夏令时
  my ($sec, $min, $hour, $mday, $mon, $year, $wday, $yday, $isdst) = localtime($unix_timestamp);
  # necessary conversion of $mon and $year
  $mon += 1;
  $year += 1900;
  print "Current time: $year-$mon-$mday $hour:$min:$secn";

需要注意的是,localtime()返回的月份和年份需要手动修正:月份从0开始,所以加1;年份是相对于1900的偏移,所以加1900。这个小细节经常被新手忽略,调试时很容易踩坑。

本文转载于:https://www.jb51.net/article/67361.htm 如有侵犯,请联系zhengruancom@outlook.com删除。
免责声明:正软商城发布此文仅为传递信息,不代表正软商城认同其观点或证实其描述。

产品推荐

热门关注