我使用以下代码打印当前时间。
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()
功能是一个容易记住的答案。