如何从本地时间()中提取时区



我使用以下代码打印当前时间。

use Getopt::Long;
use Time::Local;
sub gettime
{
        my $t = time();
        my ($sec,$mn,$hr,$mday,$mon,$yr,@left, $dstr);
        ($sec,$mn,$hr,$mday,$mon,$yr,@left) = localtime($t);
        $yr  = $yr-100+2000;
        $mon += 1;
        $dstr = sprintf "%02d:%02d:%02d (%02d-%02d-%04d)", $hr, $mn, $sec, $mon, $mday, $yr;
        print $dstr;
}
gettime();

我可以使用以下命令设置时区:

local $ENV{TZ} = ":/usr/share/lib/zoneinfo/America/Los_Angeles";

如何从localtime()中提取时区?

您可以使用

strftime()

use POSIX;
$tz = strftime("%Z", localtime());

或者,计算localtime()gmtime()之间的差异。

您可以拥有时区以及UTC的偏移量:

perl -MPOSIX -e 'print strftime "%Z (%z)n",localtime'

这是纯粹的Perl方法,用于在不使用外部模块的情况下计算当前时区:

sub get_timezone {
  # Get the current local time
  my @localtime = localtime();
  # Get the current GMT time
  my @gmtime = gmtime();
  # Calculate the time difference in hours
  my $timezone = ($localtime[2] - $gmtime[2]);
  # If the day is different, adjust the timezone
  if ($localtime[3] != $gmtime[3]) {
    if ($localtime[3] < $gmtime[3]) {
        $timezone += 24;
    } else {
        $timezone -= 24;
    }
  }
  return $timezone; # e.g. -3
} # /get_timezone
print "Timezone: GMT " . &get_timezone() . "n";
$ perl -MPOSIX -le 'tzset; print for tzname'
CST
CDT

POSIX模块中的tzset()tzname()功能是一个容易记住的答案。

相关内容

  • 没有找到相关文章

最新更新