英語で各月の略号は3文字の短い形式があります。
以下表の通り各月は3文字の大文字で表されます。
月 | 英略 | 英 |
---|---|---|
01月 | JAN | January |
02月 | FEB | February |
03月 | MAR | March |
04月 | APR | April |
05月 | MAY | May |
06月 | JUN | June |
07月 | JUL | July |
08月 | AUG | August |
09月 | SEP | September |
10月 | OCT | October |
11月 | NOV | November |
12月 | DEC | December |
C#で略号をDateTimeに変換する方法
C# で上記3文字の略号から月を取得する場合 "MMM" というキーワードを使用します。使い方は以下の通り。
// 略号から月を取得する using System.Globalization; public static void Foo() { string key = "SEP"; // September -> 9月 bool isOk = DateTime.TryParseExact(key, "MMM", CultureInfo.InvariantCulture, DateTimeStyles.None, out DateTime result); if(isOk) { // 1900/09/01 00:00:00 になってるので月だけ取得する int month = result.Month; Console.WriteLine(month); // > 9 } // 以下の書き方でも良いが key が変換できないと例外が発生する DateTime result2 = DateTime.ParseExact(key, "MMM", CultureInfo.InvariantCulture); }
省略しない完全な名前で月を取得する場合は "MMMM" というキーワードを使用します。
// 完全名から月を取得する using System.Globalization; public static void Foo() { string key = "December"; // 12月 bool isOk = DateTime.TryParseExact(key, "MMMM", CultureInfo.InvariantCulture, DateTimeStyles.None, out DateTime result); if(isOk) { // 1900/12/01 00:00:00 になってるので月だけ取得する int month = result.Month; Console.WriteLine(month); // > 12 } // 以下の書き方でも良いが key が変換できないと例外が発生する DateTime result2 = DateTime.ParseExact(key, "MMMM", CultureInfo.InvariantCulture); }
DateTime型から略号を取得する方法
DateTime 型から月の略語を取得するときも MMM を使いますが、OSの設定が日本語だと以下のように「12月」と日本語で出力されます。
string str = DateTime.Now.ToString("MMM"); // 12月 // このプロパティによって出力が決まる var c = Thread.CurrentThread.CurrentCulture; // ja-jp
この時どういう出力がされるのかは、ToString の引数の IFormatProvider を省略した場合、今のスレッドの CurrentCulture が参照されます。OS の言語設定次第で変わってしまうのでフランス語設定などにしているとまた全然違う出力になります。
なので、「英語」の「3文字の短縮形」を出力した場合以下のように英語を指定するパラメーターを引数に指定します。
string str = DateTime.Now.ToString("MMM", new CultureInfo("en-us")); // Dec