2009-09-09 21 views
12

3文字コードを取得する方法はありますか System.TimeZoneInfo.Local ?TimeZoneInfoの短縮名の取得方法

東部夏時間の代わりにEDTを使用することができます。

+0

1つは単にちょうどタイムゾーン情報から、日光を決定するかどうかではないことに留意すべきです。例えば、提案されているようにレジストリを見ると、「Daylight」ではなく「Standard」のみがすべての名前に含まれていることがわかります。したがって、あなたはどこかにDateTimeを関与させずに正確な答え(Daylightを考慮に入れます)を得ることはできません。 – user420667

答えて

9

残念ながら、私は知っているこれを行う簡単な組み込みの方法はありません。しかし、自分で何かをまとめることができます。ここでは例です:

public static class TimeZoneInfoExtensions { 

     public static string Abbreviation(this TimeZoneInfo Source) { 

     var Map = new Dictionary<string, string>() 
     { 
      {"eastern standard time","est"}, 
      {"mountain standard time","mst"}, 
      {"central standard time","cst"}, 
      {"pacific standard time","pst"} 
      //etc... 
     }; 

     return Map[Source.Id.ToLower()].ToUpper(); 

    } 

} 

用途として、次のとおりです。

string CurrentTimeZoneAbbreviation = System.TimeZoneInfo.Local.Abbreviation(); 

あなたはより多くの変換が必要な場合は、あなただけの地図辞書にそれらを差し込むことができます。

TimeZoneInfo.Idは、[HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Windows NT \ CurrentVersion \ Time Zones]の指定されたキーと一致する文字列になります。同じIDと略語を含む、一致するデータベースをオンラインで見つけることができれば、ペア(例:正規表現など)を素早く抽出してインポートし、それらをマップ辞書にドロップすることが可能です。そのため

var abbr = System.TimeZoneInfo.Local.TimeZoneAbbr(); 

とヘルパー::

+1

'Id 'の可能な値は、' HKEY_LOCAL_MACHINE \ Software \ Microsoft \ Windows NT \ CurrentVersion \ Time Zone'のレジストリにあります(http://www.timeanddate.com/libraryの名前とは異なります) /略語/時間帯/) – dtb

+0

@dtb:ありがとうございます。 –

1

あなたのような何かを書くことができます

public static class ConvertionHelper 
{ 
    public static String TimeZoneAbbr(this TimeZoneInfo zone) 
    { 
     var zoneName = zone.Id;/* zone.IsDaylightSavingTime(DateTime.UtcNow) 
      ? zone.DaylightName 
      : zone.StandardName;*/ 
     var zoneAbbr = zoneName.CapitalLetters(); 
     return zoneAbbr; 
    } 

    public static String CapitalLetters(this String str) 
    { 
     return str.Transform(c => Char.IsUpper(c) 
      ? c.ToString(CultureInfo.InvariantCulture) 
      : null); 
    } 

    private static String Transform(this String src, Func<Char, String> transformation) 
    { 
     if (String.IsNullOrWhiteSpace(src)) 
     { 
      return src; 
     } 

     var result = src.Select(transformation) 
      .Where(res => res != null) 
      .ToList(); 

     return String.Join("", result); 
    } 
} 
関連する問題