예제 #1
0
        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));
                }
            }
        }
예제 #2
0
        /// <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);
        }