[Edit][Create New]
[ IndexPage / ネットとプログラミング / CGI / 便利なスクリプト片(未整理) / rfcdate.pl ]

rfcdate.pl

#!/usr/local/bin/perl

package date;
require 'timelocal.pl';

sub time2rfc{
		local($now) = @_;
	local($sec,$min,$hour,$mday,$mon,$year,$wday) = gmtime($now);
	$mon = ("Jan","Feb","Mar","Apr","May","Jun"
	       ,"Jul","Aug","Sep","Oct","Nov","Dec")[$mon];
	$wday = ("Sun","Mon","Tue","Wed","Thu","Fri","Sat")[$wday];
	sprintf("$wday, %2.2d $mon %4.4d %2.2d:%2.2d:%2.2d GMT"
		,$mday,$year+1900,$hour,$min,$sec);
}

sub time2plain{
	local($now) = @_;
	local($sec,$min,$hour,$mday,$mon,$year,$wday) = gmtime($now);
	sprintf("%4.4d/%2.2d/%2.2d %2.2d:%2.2d:%2.2d"
		,$year+1900, $mon+1, $mday, $hour, $min, $sec);
}	

sub rfc2plain{
	local($now, $count) = @_;
	local($mday, $mon, $year, $hour, $min, $sec) = $now =~ /[^,]+,\s*(\d+)[- ]+(\w+)[- ]+(\d+)\s+(\d+):(\d+):(\d+)/;
	foreach("Jan","Feb","Mar","Apr","May","Jun"
	   ,"Jul","Aug","Sep","Oct","Nov","Dec"){
		$mon = $count ,last if $mon =~ /$_/i;
		$count++;
	}
	$year -= 1900 if $year > 1900;
	sprintf("%4.4d/%2.2d/%2.2d %2.2d:%2.2d:%2.2d",
		$year+1900, $mon+1, $mday, $hour, $min, $sec);
}

sub rfc2plain2{
	### JST以外にも対応
	local($time);
	local($now, $count) = @_;
	local($mday, $mon, $year, $hour, $min, $sec, $timezone) = ($now =~ /(?:[
^,]+,)?\s*(\d+)[- ]+(\w+)[- ]+(\d+)\s+(\d+):(\d+):(\d+)\s+([+-]\d{4})?/);

	foreach("Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov
","Dec") {
		$mon = $count ,last if $mon =~ /$_/i;
		$count++;
	}
	$year -= 1900 if $year > 1900;
	if($timezone){
		$timezone /= 100;
		$time = timegm($sec, $min, $hour, $mday, $mon, $year);
		$time -= $timezone * 60*60;
		($sec, $min, $hour, $mday, $mon, $year) = localtime($time);
	}
	$year -=  100 if $year >   99;
	sprintf("%2.2d/%2.2d/%2.2d %2.2d:%2.2d",
			$year, $mon + 1, $mday, $hour, $min);
}
sub rfc2time{
	local($now, $count) = @_;
	local($mday, $mon, $year, $hour, $min, $sec) = $now =~ /[^,]+,\s*(\d+)[- ]+(\w+)[- ]+(\d+)\s+(\d+):(\d+):(\d+)/;
	return unless $mday;
	foreach("Jan","Feb","Mar","Apr","May","Jun"
	   ,"Jul","Aug","Sep","Oct","Nov","Dec"){
		$mon = $count ,last if $mon =~ /$_/i;
		$count++;
	}
	$year -= 1900 if $year > 1900;
	timelocal($sec,$min,$hour,$mday,$mon,$year);
}

1;