diff options
author | Eric Wong <e@80x24.org> | 2015-09-22 10:09:43 +0000 |
---|---|---|
committer | Eric Wong <e@80x24.org> | 2015-09-22 22:12:16 +0000 |
commit | 01af7ca10ae9a33248f18be92e3251d08b94d7fb (patch) | |
tree | a877b74f6ad75b2aff7afec43d9d2b52d278b4e4 /lib/PublicInbox/NNTP.pm | |
parent | 0b87f63548f524365a7e1c39635fdb05bfb3fb42 (diff) | |
download | public-inbox-01af7ca10ae9a33248f18be92e3251d08b94d7fb.tar.gz |
RFC 3977 supports YYYYMMDD dates while retaining backwards compatibility for old YYMMDD dates.
Diffstat (limited to 'lib/PublicInbox/NNTP.pm')
-rw-r--r-- | lib/PublicInbox/NNTP.pm | 18 |
1 files changed, 11 insertions, 7 deletions
diff --git a/lib/PublicInbox/NNTP.pm b/lib/PublicInbox/NNTP.pm index 91b10f20..bc8d6eda 100644 --- a/lib/PublicInbox/NNTP.pm +++ b/lib/PublicInbox/NNTP.pm @@ -169,22 +169,26 @@ sub cmd_listgroup ($;$) { sub parse_time ($$;$) { my ($date, $time, $gmt) = @_; use Time::Local qw(); - my ($YY, $MM, $DD) = unpack('A2A2A2', $date); my ($hh, $mm, $ss) = unpack('A2A2A2', $time); if (defined $gmt) { $gmt =~ /\A(?:UTC|GMT)\z/i or die "GM invalid: $gmt\n"; $gmt = 1; } my @now = $gmt ? gmtime : localtime; - if ($YY > strftime('%y', @now)) { - my $cur_year = $now[5] + 1900; - $YY += int($cur_year / 1000) * 1000 - 100; + my ($YYYY, $MM, $DD); + if (length($date) == 8) { # RFC 3977 allows YYYYMMDD + ($YYYY, $MM, $DD) = unpack('A4A2A2', $date); + } else { # legacy clients send YYMMDD + ($YYYY, $MM, $DD) = unpack('A2A2A2', $date); + if ($YYYY > strftime('%y', @now)) { + my $cur_year = $now[5] + 1900; + $YYYY += int($cur_year / 1000) * 1000 - 100; + } } - if ($gmt) { - Time::Local::timegm($ss, $mm, $hh, $DD, $MM - 1, $YY); + Time::Local::timegm($ss, $mm, $hh, $DD, $MM - 1, $YYYY); } else { - Time::Local::timelocal($ss, $mm, $hh, $DD, $MM - 1, $YY); + Time::Local::timelocal($ss, $mm, $hh, $DD, $MM - 1, $YYYY); } } |