C#でISO8601形式の継続時間文字列をTimeSpanに変換

 

ISO8601形式の継続時間文字列をTimeSpanに変換

public class ExchangeUtil : PublicWebApiUtil {
    /// 
    /// ISO8601形式の文字列をTimeSpanに変換します。
    /// 
    /// ISO8601形式の文字列
    /// 
    public static TimeSpan Iso8601ToTimeSpan(string iso8601) {
        if (iso8601 == null || iso8601 == "") {
            //0秒で返す。
            return new TimeSpan(0, 0, 0);
        }
        TimeSpan? ret = null;
        int index = iso8601.IndexOf("D");
        if (index > 0) {
            //日付部("P1D")が存在する場合
            string strDays = iso8601.Substring(0, index);
            TimeSpan days = new TimeSpan(int.Parse(strDays.Replace("P", "")), 0, 0, 0);
            ret = days;

            //時間部が存在する場合
            index = iso8601.IndexOf("DT");
            if (index > 0) {
                TimeSpan other = XmlConvert.ToTimeSpan("PT" + iso8601.Substring(index + 2));
                ret = days.Add(other);
            }
        } else {
            ret =  XmlConvert.ToTimeSpan(iso8601.Replace("P", "PT"));
        }
        return new TimeSpan(ret.Value.Days, ret.Value.Hours, ret.Value.Minutes, 0);
    }
}

0 件のコメント:

コメントを投稿

厳選 Visual Studioの便利なショートカット

  エラー箇所にジャンプ 「Ctrl + Shift + F12」 ブレークポイント 設定/解除 「F9」 有効化/無効化 「Ctrl + F9」 ViEmu特有 「:ls」:バッファナンバーのリストを表示。 「:b2」:バッファ2のファイルを開く。 「:n」:次のバッファのファ...