こちらのエントリからコードを拝借。コードページとか。
C++難しいなぁ…。ちゅーか元号変わったら、ICUバージョンアップするのかな?
#include <string> #include <iostream> #include "unicode/calendar.h" #include "unicode/smpdtfmt.h" void format(char *dst, const char *pattern, const char *codepage, int year, int month, int date, int hour, int minute, int second ){ UErrorCode status = U_ZERO_ERROR; Calendar *cal = Calendar::createInstance("ja_JP_TRADITIONAL", status); SimpleDateFormat *fmt = new SimpleDateFormat(UnicodeString(pattern), status); fmt->adoptCalendar(cal); cal->set(year - 1988, month - 1, date, hour, minute, second); UDate now = cal->getTime(status); UnicodeString buf; fmt->format(now, buf); std::string conv(buf.extract(0, buf.length(), 0, codepage), '\0'); buf.extract(0, buf.length(), &conv[0], "shift_jis"); memcpy(dst, conv.c_str(), conv.size()); delete fmt; } void puts(int year, int month, int date) { char dst[256]; memset(dst, 0, sizeof(dst)); format(dst, "Gy.M.d", "Shift_JIS", year, month, date, 0, 0, 0); std::cout << dst << std::endl; } int main() { puts(1800, 1, 1); puts(1900, 1, 1); puts(1988, 1, 1); puts(2008, 1, 1); }
寛政とかでるのかー。
寛政12.1.1
明治33.1.1
昭和63.1.1
平成20.1.1