예제 #1
0
        public static string ToRelative(this DateTime target)
        {
            target = target.ToUniversalTime();
            ArgValidator.IsNotInFuture(target, "target");
            ArgValidator.IsNotInvalidDate(target, "target");

            StringBuilder result = new StringBuilder();
            TimeSpan      diff   = (DateTime.UtcNow - target.ToUniversalTime());

            Action <int, string> format = (v, u) =>
            {
                if (v > 0)
                {
                    if (result.Length > 0)
                    {
                        result.Append(", ");
                    }

                    string plural = (v > 1) ? "s" : string.Empty;

                    result.Append("{0} {1}{2}".FormatWith(v, u, plural));
                }
            };

            if (diff.TotalDays > 365)
            {
                var year = (int)(diff.TotalDays / 365);
                format(year, "year");
                diff = diff.Subtract(TimeSpan.FromDays(year * 365));
            }

            format(diff.Days, "day");
            format(diff.Hours, "hour");
            format(diff.Minutes, "minute");

            return((result.Length == 0) ? "few moments" : result.ToString());
        }
예제 #2
0
        public static string FormatWith(this string target, params object[] args)
        {
            ArgValidator.IsNotEmpty(target, "target");

            return(string.Format(CultureInfo.CurrentCulture, target, args));
        }