12#include<iostream>3#include<string>4#include<sstream>5#include<tuple>6#include"DateTime.hpp"78intdate_format(int y,int m,int d)9{10return y *10000+ m *100+ d;11}1213intis_first_year(int y)14{15if(y ==1)16return1;17else18return0;19}2021std::string MonthDay(int m,int d)22{23 std::stringstream ss;24 ss << m <<"月";25 ss << d <<"日";26return ss.str();27}2829std::string ToJapaneseEraYear(int y,int m,int d){30 std::stringstream ss;31enumGengoType{ Meiji, Taisho, Showa, Heisei, Reiwa } type;32enum{ Gannen, Nen };33constchar* name[]={"明治","大正","昭和","平成","令和"};34constchar* gannen[]={"元年","年"};3536int target =date_format(y, m, d);37staticint result, ad;3839 ad = y;4041if(target >=date_format(1868,1,25)&& target <=date_format(1912,7,29)){42 type = Meiji;43 result =calc_year(y, Meiji);44if(is_first_year(result)==1){45 ss << ad <<"年("<< name[type]<< gannen[Gannen]<<")"<<MonthDay(m, d);46}47else{48 ss << ad <<"年("<< name[type]<< result << gannen[Nen]<<")"<<MonthDay(m, d);49}50}51elseif(target >=date_format(1912,7,30)&& target <=date_format(1926,7,30)){52 type = Taisho;53 result =calc_year(y, Taisho);54if(is_first_year(result)==1){55 ss << ad <<"年("<< name[type]<< gannen[Gannen]<<")"<<MonthDay(m, d);56}57else{58 ss << ad <<"年("<< name[type]<< result << gannen[Nen]<<")"<<MonthDay(m, d);59}60}61elseif(target >=date_format(1926,12,25)&& target <=date_format(1989,1,7)){62 type = Showa;63 result =calc_year(y, Showa);64if(is_first_year(result)==1){65 ss << ad <<"年("<< name[type]<< gannen[Gannen]<<")"<<MonthDay(m, d);66}67else{68 ss << ad <<"年("<< name[type]<< result << gannen[Nen]<<")"<<MonthDay(m, d);69}70}71elseif(target >=date_format(1989,1,8)&& target <=date_format(2019,4,30)){72 type = Heisei;73 result =calc_year(y,Heisei);74if(is_first_year(result)==1){75 ss << ad <<"年("<< name[type]<< gannen[Gannen]<<")"<<MonthDay(m, d);76}77else{78 ss << ad <<"年("<< name[type]<< result << gannen[Nen]<<")"<<MonthDay(m, d);79}80}81elseif(target >=date_format(2019,5,1)){82 type = Reiwa;83 result =calc_year(y, Reiwa);84if(is_first_year(result)==1){85 ss << ad <<"年("<< name[type]<< gannen[Gannen]<<")"<<MonthDay(m, d);86}87else{88 ss << ad <<"年("<< name[type]<< result << gannen[Nen]<<")"<<MonthDay(m, d);89}90}91return ss.str();92}9394std::ostream&operator<<(std::ostream& stream,const Date& date)95{96int y = std::get<0>(date);97int m = std::get<1>(date);98int d = std::get<2>(date);99auto ret =ToJapaneseEraYear(y, m, d);100return stream << ret;101}102103std::ostream&operator<<(std::ostream& stream,const Time& time)104{105return stream
106<< std::get<0>(time)<<"時"107<< std::get<1>(time)<<"分"108<< std::get<2>(time)<<"秒";109}110111intcalc_year(int year,int type)112{113int ret;114switch(type){115case0:// 明治116 ret = year +33-1900;117break;118case1:// 大正119 ret = year -11-1900;120break;121case2:// 昭和122 ret = year -25-1900;123break;124case3:// 平成125 ret = year +12-2000;126break;127case4:// 令和128 ret = year -18-2000;129break;130}131return ret;132}133134intcalc_JapaneseEraToAD(int type,int y)135{136int ret;137switch(type){138case0:// 明治139 ret = y -33+1900;140break;141case1:// 大正142 ret = y +11+1900;143break;144case2:// 昭和145 ret = y +25+1900;146break;147case3:// 平成148 ret = y -12+2000;149break;150case4:// 令和151 ret = y +18+2000;152break;153}154return ret;155}
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/10/13 05:24
2018/10/13 09:09
2018/10/13 12:49
2018/10/13 13:11