当記事では、「ccyyMMdd」形式の日付を「yyyyMMdd」形式に変換する方法を解説していきます。
「ccyy」というのはなかなか見ない形式ですね。。私自身調べてみましたがあまり情報がなかったので、今回記事にすることにしました。一般的には「yyyyMMdd」が使われますが、稀に「ccyyMMdd」を採用しているところがあるみたいです。
それではさっそく本題に入っていきましょう!
「ccyyMMdd」の意味
まずはそれぞれのアルファベットがもつ意味を確認していきましょう。
「cc」 ・・・century。世紀。
「yy」 ・・・year。年。
「MM」 ・・・month。月。
「dd」 ・・・day。日。
世紀の数え方、「ccyyMMdd」での例
世紀で考えることはあまりないと思うので、世紀の数え方について知っておきましょう。知っている方は読み飛ばしてもらってOKです。
世紀の数え方は、100年ごとの年代区分で、1~100年を1世紀と数えます。
つまり、1901年~2000年は20世紀。2001年から2100年は21世紀となります。
これを「ccyy」形式にあてはめると、
例)「2100」・・・21世紀0年。「yyyy」に直すと、2001年となります。
ここで注意すべきなのが、「ccyy」形式での年が00の場合は、世紀の0年目、「yyyy」に直すと「○○01」となることです。
「cc」と「yy」を分解して考えるとわかりやすいと思います。
21世紀は2001年、これが0年度だとするとそのまんま2001年となります。
ややこしそうな例をもう一つだけ見ておきましょう。「ccyy」形式の2099で考えると、
「2099」・・・20世紀99年。「yyyy」に直すと、2000年になります。
この例だと、20世紀は1901。これに99年を足すと2000年となります。
簡単に世紀から年度に変換する方法として、以下のような式が有名です。
年 =(世紀 ー 1)× 100 + 1
先ほどの例に当てはめると、ccyy:2099
年 = (20 ー 1)× 100 + 1 = 1901
これに「yy」部である99を足すと、2000年なります。
長くなりましたが、実際にソースを書いてみましょう。
JAVAで「ccyyMMdd」から「yyyyMMdd」に変換する方法
それではソースのほうを書いていきましょう。
残念ながら SimpleDateFormat では「cc」に対応していないようなので、先ほど紹介した計算方法で変換していきます。
共通のメソッドとしてUtilなどにstaticで記載するのがいいと思います。
/**
* 「cc」文字数
*/
static final Integer mIcc = 2;
/**
* 「yy」文字数
*/
static final Integer mIyy = 2;
/**
* 「ccyyMMdd」から「yyyyMMdd」へ変換
* @param pStrBeforeDate
* @return 変換後の日付
*/
public static String centuryFormat(String strBeforeDate) {
// 文字列から「cc」を取得
String strCc = strBeforeDate.substring(0, mIcc);
// 文字列から「yy」を取得
String strYy = strBeforeDate.substring(mIcc, mIcc + mIyy);
// 数値に変換
Integer iCc = Integer.parseInt(strCc);
Integer iYy = Integer.parseInt(strYy);
// 「ccyy」を「yyyy」に変換
Integer iYyyy = (iCc - 1) * 100 + 1 + iYy;
// 文字列に変換
String strYyyy = iYyyy.toString();
// 「yyyyMMddに変換」
String strAfterDate = strYyyy + strBeforeDate.substring(strYyyy.length());
return strAfterDate;
}
こんな感じになりました。文字数の箇所は直接数字を書くのはコード上あまりよくないので、メンバ変数として宣言しています。
このメソッドを使えば、「ccyyMMdd」から簡単に「yyyyMMdd」に変換することができます。
以上、「cc」ってなんだ。。となっていた方の少しでもお役に立てればと思います!