My time zone is KST(South Korea republic), but when I executed following command in my system(openbsd),I got GMT time.
Which command do you mean? If you mean Perl's output, gmtime will give you GMT, and localtime will give you whatever the current time zone setting on that machine is. If you want more advanced functionality than that, then you need to switch to DateTime.
And thanks for your concern for using old version, but I can't not upgrade. It is not my authority.
Similar advice as in Yes, even you can use CPAN applies.
| [reply] |
Thanks a lot for my missing comment.
On openbsd system, typed the command:
SD_OCC1# openssl x509 -in /etc/isakmpd/certs/local.crt -noout -dates (enter!)
notBefore=Nov 23 22:31:12 2019 GMT
notAfter=Mar 19 06:52:23 2020 GMT
At thie point, I hope to change the GMT to current my contry time zone(KST).
Thanks in advance,
And followings are code changed by your recommendation.
my %MONTH_NAMES = ( "Jan" => '01', "Feb"=> '02', "Mar" => '03', "Apr
+"=> '04',"May" => '05', "Jun" => '06', "Jul" => '07', "Aug" => '08',
+ "Sep" => '09', "Oct" => '10', "Nov" => '11', "Dec" => '12' );
if(m/notBefore/) {
chomp; ($notB1, $notB2) = split('=', $_);
$notB2 =~ tr/:/ /;
my($mon,$mday,$hour,$minute,$sec,$year)=split(/ /,$notB2);
#print $mon, $mday, $hour, $minute, $sec, $year;
$time_1 = timelocal($sec,$minute,$hour,$mday,$MONTH_NAMES{$mon},$ye
+ar);
print $MONTH_NAMES{$mon};
}
2020-01-09 Athanasius fixed long code line.
| [reply] [d/l] [select] |
And followings are code changed by your recommendation.
Not really, you're still using timelocal instead of timegm_modern (and the month numbers are still off by one).
As I said, for best results, use DateTime. For the other solutions, if your local system isn't set to the right time zone, you could try forcing it via local $ENV{TZ}='Asia/Seoul';, but that's not guaranteed to work and may not be portable.
use warnings;
use strict;
my $date = "Nov 23 22:31:12 2019 GMT";
print "Input date: $date\n";
{
use Time::Local qw/timegm_modern/;
my %MONTH_NAMES = ( Jan=>0, Feb=>1, Mar=>2, Apr=>3, May=>4,
Jun=>5, Jul=>6, Aug=>7, Sep=>8, Oct=>9, Nov=>10, Dec=>11 );
my ($mon,$mday,$hour,$minute,$sec,$year) = split /\s+|:/, $date;
my $tm = timegm_modern($sec,$minute,$hour,$mday,
$MONTH_NAMES{$mon},$year);
print "timegm+gmtime: ", gmtime($tm)." GMT\n";
print "timegm+localtime: ", localtime($tm)." Local\n";
}
# - OR -
{
use Time::Piece;
my $tm = Time::Piece->strptime($date, '%b %d %H:%M:%S %Y %Z');
print "Time::Piece: ", $tm->strftime, "\n";
print "Time::Piece+localtime: ", localtime($tm->epoch)." Local\n";
}
# - OR -
{
use DateTime;
use DateTime::Format::Strptime;
my $strp = DateTime::Format::Strptime->new(
pattern => '%b %d %H:%M:%S %Y %Z', on_error => 'croak');
my $dt = $strp->parse_datetime($date);
print "DateTime: ",$dt->strftime("%Y-%m-%dT%H:%M:%S%z (%Z)"),"\n";
$dt->set_time_zone('Asia/Seoul');
print "DateTime: ",$dt->strftime("%Y-%m-%dT%H:%M:%S%z (%Z)"),"\n";
}
| [reply] [d/l] [select] |
Nov is 10, actually. The month number is 0-based (for consistency with localtime).
| [reply] [d/l] |