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

ej83mcc0  于 2023-04-06  发布在  Perl
关注(0)|答案(4)|浏览(118)

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

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()中提取时区?

qgzx9mmu

qgzx9mmu1#

可以使用strftime()

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

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

mf98qq94

mf98qq942#

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

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

jqjz2hbq3#

这里是纯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";
pwuypxnk

pwuypxnk4#

$ perl -MPOSIX -le 'tzset; print for tzname'
CST
CDT

来自POSIX模块的tzset()tzname()函数可以是一个容易记住的答案。

相关问题