public string ToString(string format, IFormatProvider formatProvider) { if (format == null || format == "") { return(ToString()); } if (char.IsNumber(format, format.Length - 1)) { string lastChar = format.Substring(format.Length - 1, 1); switch (format.Substring(0, format.Length - 1)) { case "D": return(String.Format(formatProvider, "{0}{1}°", (IsPositive ? '+' : '-'), AbsDegrees.ToString("F" + lastChar, formatProvider))); case "DM": return(String.Format(formatProvider, "{0}{1}°{2}\'", (IsPositive ? '+' : '-'), Hour, DecimalMinutes.ToString("F" + lastChar, formatProvider))); case "DMS": return(String.Format(formatProvider, "{0}{1}°{2}\'{3}\"", (IsPositive ? '+' : '-'), Hour, Minute, Seconds.ToString("F" + lastChar, formatProvider))); case "M": return(String.Format(formatProvider, "{0}\'", TotalMinutes.ToString("F" + lastChar, formatProvider))); case "MS": return(String.Format(formatProvider, "{0}\'{1}\"", Minute, Seconds.ToString("F" + lastChar, formatProvider))); case "S": return(String.Format(formatProvider, "{0}\"", totalSeconds.ToString("F" + lastChar, formatProvider))); default: throw new FormatException("Format Exception of Angle.ToString(): " + format); } } else { if (format == "DMs") { return(String.Format(formatProvider, "{0}{1:D2}°{2:D2}\'{3,2:F0}\"", IsPositive ? '+' : '-', Hour, Minute, Seconds)); } else { return(ToString(format + "2", formatProvider)); } } }
/// <summary> /// フォーマットに基づいて文字列を生成する /// </summary> /// <param name="format"> /// フォーマット /// %h 時 /// %m 分 /// %s 秒 /// %d 日 /// %w 週の文字(例:Mon) /// %S 秒の通算 /// %M 分の通算 /// %H 時の通算 /// %D 日の通算 /// %DI 日の通算(整数部のみ) /// </param> /// <returns></returns> // public string ToString(string format) { format = format.Replace("%h", Hour.ToString("00")); format = format.Replace("%m", Minute.ToString("00")); format = format.Replace("%s", Second.ToString("00")); format = format.Replace("%d", Day.ToString()); var day = Day; if (day < 0) { day = (day % DateTimeEx._dayStrings.Length) + 7; } format = format.Replace("%w", DateTimeEx._dayStrings[day % DateTimeEx._dayStrings.Length]); format = format.Replace("%H", TotalHours.ToString()); format = format.Replace("%S", TotalSeconds.ToString()); format = format.Replace("%M", TotalMinutes.ToString()); format = format.Replace("%DI", ((int)TotalDays).ToString()); // 日を整数化(切り捨て) format = format.Replace("%D", TotalDays.ToString()); return(format); }