西暦 to 和暦
Posted feedbacks - Perl
なんという汚いソースコード…!
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 | #!/usr/bin/env perl
use strict;
use warnings;
use Carp;
my @anDaysInMonth = (31,28,31,30,31,30,31,31,30,31,30,31);
unshift @anDaysInMonth,undef;
my %hsNengoName = ('m'=>'Meiji','t'=>'Taisho','s'=>'Showa','h'=>'Heisei');
my %hnBeginYear = ('m'=>1868,'t'=>1912,'s'=>1926,'h'=>1989);
my ($nNowDay,$nNowMonth,$nNowYear);
(undef,undef,undef,$nNowDay,$nNowMonth,$nNowYear) = localtime(time);
$nNowMonth++;
$nNowYear += 1900;
exit if !defined $ARGV[0] or $ARGV[0] !~ m|(\d{4})/(\d{1,2})/(\d{1,2})|;
my ($nYear,$nMonth,$nDay) = ($1,$2,$3);
$anDaysInMonth[2]++ if $nYear % 400 == 0 || ($nYear % 100 != 0 && $nYear % 4 == 0);
&error if $nYear < 1868 or $nMonth < 1 or $nMonth > 12 or $nDay < 1 or $nDay > $anDaysInMonth[$nMonth];
my $sCapital = '';
if(
($nYear > 1868 || ($nYear == 1868 && ($nMonth > 9 || ($nMonth == 9 && $nDay >= 8))))
&&
($nYear < 1912 || ($nYear == 1912 && ($nMonth < 7 || ($nMonth == 7 && $nDay <= 30))))){
$sCapital .= 'm';
}
if(
($nYear > 1912 || ($nYear == 1912 && ($nMonth > 7 || ($nMonth == 7 && $nDay >= 30))))
&&
($nYear < 1926 || ($nYear == 1926 && ($nMonth < 12 || ($nMonth == 12 && $nDay <= 25))))){
$sCapital .= 't';
}
if(
($nYear > 1926 || ($nYear == 1926 && ($nMonth == 12 && $nDay >= 25)))
&&
($nYear < 1989 || ($nYear == 1989 && ($nMonth == 1 && $nDay <= 7)))){
$sCapital .= 's';
}
if(
($nYear > 1989 || ($nYear == 1989 && ($nMonth > 1 || ($nMonth == 1 && $nDay >= 8))))
&&
($nYear < $nNowYear || ($nYear == $nNowYear && ($nMonth < $nNowMonth || ($nMonth == $nNowMonth && ($nDay <= $nNowDay)))))){
$sCapital .= 'h';
}
&error if $sCapital eq '';
my @asCapitals = split(m||,$sCapital);
foreach(@asCapitals){
my $nDiff = $nYear-$hnBeginYear{$_}+1;
$_ = $hsNengoName{$_}."$nDiff $nMonth/$nDay";
}
print join(', ',@asCapitals)."\n";
exit;
sub error{
print "OUT OF RANGE\n";
exit -1;
}
|


ocean
#5067()
Rating0/8=0.00
>a.py 1868/12/2
明治1年12月2日
>a.py 1926/12/24
大正15年12月24日
>a.py 2007/12/01
平成19年12月1日
>a.py 1926/12/25
大正15年12月25日 昭和1年12月25日
>a.py 1868/1/2
範囲外
>a.py 1868/100/2
範囲外
see: 和暦西暦対応表
[ reply ]