このサイトでは、分析、カスタマイズされたコンテンツ、および広告に Cookie を使用します。このサイトを引き続き閲覧すると、Cookie の使用に同意するものと見なされます。
Hi, Developers,
straightapps.com
最終更新日 April 1, 2019

スマホ用のサイトを用意する場合は、ここにリンクを用意します。

トップページ > Windows トップ > SHRyear

昭和・平成・令和・西暦年を相互変換する Windows デスクトップ・プログラム SHRyear を紹介しています。

投稿 April 1, 2019

新元号が発表され、元号表記が複雑になってきました。

変換するには Windows デスクトップアプリは大げさで面倒ですが、簡単に作成できるので、とりあえず作成しました。 昭和・平成・令和の元年と西暦年が正しく記録されれば、変換は簡単です。

Win7 + Visual C++ 2013/MFC で、ダイアログアプリとして作成していますが、計算部分についてはOS等には依存しません。 使用している Windows API は、同等の関数に置き換えれば、計算部分はそのまま他のOSや言語でも利用可能と思いますので、 関数などを含めて、ここで紹介しています。

このページにトピック一覧がありますので、あわせてご参照ください。
なお、このページ、および開発関連ページは、PC向けデザインとなっております。 画面サイズの小さいスマホでは、快適な表示が得られませんので、ご了承ください。
ご利用に際しては、必ずプライバシーポリシー(免責事項等)をご参照ください。

▲ページ先頭へ

どんな動作をするのか

投稿 April 1, 2019

起動すると、次のような画面が表示されます。

起動時には、今年が表示されており、西暦が選択されています。

西暦・令和・平成・昭和のいずれかの年を入力すると、「更新」ボタンが利用可能になります。
※ 「更新」ボタンが利用可能なとき、画面上の年は正しく一致していない可能性があります。

「更新」ボタンを押す(またはエンターキーを押す)と、「<< 入力」の表示がある年を基準に更新されます。

私なら、完全に信用できるサイト以外からのダウンロードはしませんが、 興味がある方のために、実行ファイルを圧縮したものを置いておきます。 安全に努めているマシンで用意したファイルですが、お試しいただく場合は、出力される結果(内容)を含め、完全に自己責任でお願いします。
OSは Windows 7 以降、ランタイムなど環境の用意は 特に必要ない ( MFC ライブラリはスタティックリンクしています。 ) と思います。

実行ファイルを含む zip ファイルのダウンロードは、こちらです。
正しい zip ファイルのタイムスタンプは 2019/4/1 15:23:07、 正しい実行ファイルのタイムスタンプ(更新日時)は 2019/4/1 15:18:58 で、 zip 内は実行ファイル1つだけです。 zip ファイルサイズは 1,778,357 バイト、 実行ファイルのサイズは 3,245,568 バイトです。 パスワードは設定していません。

▲ページ先頭へ

▼ 広告

▲ページ先頭へ

年の取得

投稿 April 1, 2019

Windows API では、本日の日付(年)の取得は簡単です。
画面表示のために、ダイアログの初期化 OnInitDialog 関数で取得しています。

// 今日の年を取得して、画面に表示します。
SYSTEMTIME st;
GetLocalTime(&st);

SetDlgItemInt(IDC_YEAR, st.wYear);			// 西暦
SetDlgItemInt(IDC_REIWA, st.wYear - 2019 + 1);		// 令和(2019年が元年)
SetDlgItemInt(IDC_HEISEI, st.wYear - 1989 + 1);		// 平成(1989年が元年)
SetDlgItemInt(IDC_SHOUWA, st.wYear - 1926 + 1);		// 昭和(1926年が元年)

上記コードのコメントにも入れてありますが、取得できる st.wYear は西暦年ですので、各元号に変換しています。

令和は、2019 年が元年になりますので、西暦年 - 2019 + 1 年です。わざわざ 2019 を引いて 1 を足しているのは、間違いをなくす努力です。
平成は 1989 年が、昭和は 1926 年が元年のため、同様の計算で変換しています。

Android ネイティブアプリで日付を取得する方法は、 こちらに書いています。ご参考まで。

▲ページ先頭へ

その他のコード

投稿 April 1, 2019

年を入力する欄(エディット コントロール)は、4桁までの数字しか入れられなくしてあります。
数字しか入れられなくするには、コントロールのプロパティで、"Number" を True に設定するだけです。 文字数の制限はプロパティではできませんので、以下のように設定しています。

((CEdit*)GetDlgItem(IDC_YEAR))->SetLimitText(4);
((CEdit*)GetDlgItem(IDC_REIWA))->SetLimitText(4);
((CEdit*)GetDlgItem(IDC_HEISEI))->SetLimitText(4);
((CEdit*)GetDlgItem(IDC_SHOUWA))->SetLimitText(4);

各欄の右側に表示される「<< 入力」の文字は、コントロール名を付与したスタティック コントロールです。
ダイアログの初期化 OnInitDialog 関数で、下記のコードを持つ hideArrows 関数を呼び出して、すべて非表示にしています。

GetDlgItem(IDC_INPUT_YEAR)->ShowWindow(SW_HIDE);
GetDlgItem(IDC_INPUT_R)->ShowWindow(SW_HIDE);
GetDlgItem(IDC_INPUT_H)->ShowWindow(SW_HIDE);
GetDlgItem(IDC_INPUT_S)->ShowWindow(SW_HIDE);

入力された年がどれかを判断するため、最後に入力された欄の右に「<< 入力」と表示するため、 エディット コントロールの EN_SETFOCUS メッセージを処理しています。
hideArrows 関数を呼び出したあと、対応するものだけを表示にしています。

GetDlgItem(IDC_INPUT_YEAR)->ShowWindow(SW_SHOW);

最後に、「更新」ボタンが押されたとき、どれが入力された数字かを判定する方法を書いておきます。
4つ用意された「&lu;< 入力」の、どれが表示されているかを見ています。

// 西暦にあわせる場合
if (GetDlgItem(IDC_INPUT_YEAR)->IsWindowVisible()){
	nYear = GetDlgItemInt(IDC_YEAR);
	SetDlgItemInt(IDC_REIWA, nYear - 2019 + 1);	// 令和(2019年が元年)
	SetDlgItemInt(IDC_HEISEI, nYear - 1989 + 1);	// 平成(1989年が元年)
	SetDlgItemInt(IDC_SHOUWA, nYear - 1926 + 1);	// 昭和(1926年が元年)
}
どの元号の場合でも、いったん西暦年に変換してから、計算・表示しています。

▲ページ先頭へ

リンク先を開く(おまけメモ)

投稿 April 1, 2019

プログラムから既定のブラウザでウェブページを開くコードを書いておきます。

このユーティリティでは、画面右下のサイト名の部分をクリックすると、このサイトが開くようになっています。 スタティック・コントロールにIDを付けて、 Notify プロパティTrue に変更、 Click のハンドラから、ShellExecute 関数を呼び出します。 msdn での説明は こちら
マウスポインタの形状は矢印のままなので、隠し機能みたいになっています。 本当は、わかりやすくすべきです。

ShellExecute(GetSafeHwnd(), _T("open"), _T("https://www.straightapps.com/win/"), NULL, NULL, SW_SHOWNORMAL);
呼び出し元がダイアログのクリック処理のため、CWnd のウィンドウハンドル HWND を得る、GetSafeHwnd 関数を使っています。 また、文字の形式を自動で統一するため、_Tを使っています。

▲ページ先頭へ


関連トピックス
関連トピックはありません。


その他のおすすめ
おすすめ記事はありません。



© 2017-2019 StraightApps.com 無断転載を禁じます。No reproduction without permission.