static string 输出(时间粒度 处理级别, string 显示名, int 处理位显示值, double 处理位总值, 时间粒度 精确度, 时间粒度 粒度, bool 四舍五入, bool 保留零值前缀) { if (精确度 > 处理级别 || 粒度 < 处理级别 || (!保留零值前缀 && 处理位总值 < 1)) { return(null); } if (粒度 > 处理级别) { return(处理位显示值 + 显示名); } return((四舍五入 && 精确度 == 粒度 ? 处理位总值.四舍五入(0) : (int)处理位总值) + 显示名); }
/// <summary> /// 输出友好形式的时间字符串,如:65天17小时56分 或 12秒357毫秒 或 229分钟49秒 /// </summary> /// <param name="精确度">指示统计的精确程度,该值不可高于粒度</param> /// <param name="粒度">指示统计的最大粒度,该值不可低于精确度</param> /// <param name="四舍五入">当精确度和粒度相等时,指示值是否应当进行四舍五入</param> /// <param name="保留零值位前缀">指示是否保留为0的前置高粒度位,如:0小时0分钟29秒311毫秒,否则显示为:29秒311毫秒</param> /// <param name="仅保留最高有效位">指示是否只保留最高位,如:6天 或 120分钟 或 9年</param> /// <returns>友好形式的时间字符串</returns> public static string 转换为友好的日期时间格式(this TimeSpan t, 时间粒度 精确度, 时间粒度 粒度, bool 四舍五入, bool 保留零值位前缀, bool 仅保留最高有效位) { if (粒度 < 精确度) { throw new Exception("粒度不得小于精确度"); } StringBuilder s = new StringBuilder(); s.Append(输出(时间粒度.年, "年", t.Years(), t.TotalYears(), 精确度, 粒度, 四舍五入, 保留零值位前缀)); if (仅保留最高有效位 && s.Length > 0) { goto Output; } s.Append(输出(时间粒度.月, "个月", t.Months(), t.TotalMonths(), 精确度, 粒度, 四舍五入, 保留零值位前缀)); if (仅保留最高有效位 && s.Length > 0) { goto Output; } s.Append(输出(时间粒度.星期, "星期", t.Weeks(), t.TotalWeeks(), 精确度, 粒度, 四舍五入, 保留零值位前缀)); if (仅保留最高有效位 && s.Length > 0) { goto Output; } s.Append(输出(时间粒度.天, "天", t.Days(), t.TotalDays, 精确度, 粒度, 四舍五入, 保留零值位前缀)); if (仅保留最高有效位 && s.Length > 0) { goto Output; } s.Append(输出(时间粒度.小时, "小时", t.Hours, t.TotalHours, 精确度, 粒度, 四舍五入, 保留零值位前缀)); if (仅保留最高有效位 && s.Length > 0) { goto Output; } s.Append(输出(时间粒度.分钟, "分钟", t.Minutes, t.TotalMinutes, 精确度, 粒度, 四舍五入, 保留零值位前缀)); if (仅保留最高有效位 && s.Length > 0) { goto Output; } s.Append(输出(时间粒度.秒, "秒", t.Seconds, t.TotalSeconds, 精确度, 粒度, 四舍五入, 保留零值位前缀)); if (仅保留最高有效位 && s.Length > 0) { goto Output; } s.Append(输出(时间粒度.毫秒, "毫秒", t.Milliseconds, t.TotalMilliseconds, 精确度, 粒度, 四舍五入, 保留零值位前缀)); //if (仅保留最高有效位 && s.Length > 0) goto Output; Output : return(s.ToString()); }
/// <summary> /// 输出友好形式的时间字符串,如:65天17小时56分 或 12秒357毫秒 或 229分钟49秒 /// </summary> /// <param name="精确度">指示统计的精确程度,该值不可高于粒度</param> /// <param name="粒度">指示统计的最大粒度,该值不可低于精确度</param> /// <param name="保留零值位前缀">指示是否保留为0的前置高粒度位,如:0小时0分钟29秒311毫秒,否则显示为:29秒311毫秒</param> /// <param name="仅保留最高有效位">指示是否只保留最高位,如:6天 或 120分钟</param> /// <returns>友好形式的时间字符串</returns> public static string 转换为友好的日期时间格式(this TimeSpan t, 时间粒度 精确度, 时间粒度 粒度, bool 保留零值位前缀, bool 仅保留最高有效位) { return(转换为友好的日期时间格式(t, 精确度, 粒度, false, 保留零值位前缀, 仅保留最高有效位)); }
/// <summary> /// 输出友好形式的时间字符串,如:65天17小时56分 或 12秒357毫秒 或 229分钟49秒 /// </summary> /// <param name="精确度">指示统计的精确程度,该值不可高于粒度</param> /// <param name="粒度">指示统计的最大粒度,该值不可低于精确度</param> /// <param name="四舍五入">当精确度和粒度相等时,指示值是否应当进行四舍五入</param> /// <param name="保留零值位前缀">指示是否保留为0的前置高粒度位,如:0小时0分钟29秒311毫秒,否则显示为:29秒311毫秒</param> /// <param name="仅保留最高有效位">指示是否只保留最高位,如:6天 或 120分钟 或 9年</param> /// <returns>友好形式的时间字符串</returns> public static string 转换为友好的日期时间格式(this TimeSpan t, 时间粒度 精确度, 时间粒度 粒度, bool 四舍五入, bool 保留零值位前缀, bool 仅保留最高有效位) { if (粒度 < 精确度) throw new Exception("粒度不得小于精确度"); StringBuilder s = new StringBuilder(); s.Append(输出(时间粒度.年, "年", t.Years(), t.TotalYears(), 精确度, 粒度, 四舍五入, 保留零值位前缀)); if (仅保留最高有效位 && s.Length > 0) goto Output; s.Append(输出(时间粒度.月, "个月", t.Months(), t.TotalMonths(), 精确度, 粒度, 四舍五入, 保留零值位前缀)); if (仅保留最高有效位 && s.Length > 0) goto Output; s.Append(输出(时间粒度.星期, "星期", t.Weeks(), t.TotalWeeks(), 精确度, 粒度, 四舍五入, 保留零值位前缀)); if (仅保留最高有效位 && s.Length > 0) goto Output; s.Append(输出(时间粒度.天, "天", t.Days(), t.TotalDays, 精确度, 粒度, 四舍五入, 保留零值位前缀)); if (仅保留最高有效位 && s.Length > 0) goto Output; s.Append(输出(时间粒度.小时, "小时", t.Hours, t.TotalHours, 精确度, 粒度, 四舍五入, 保留零值位前缀)); if (仅保留最高有效位 && s.Length > 0) goto Output; s.Append(输出(时间粒度.分钟, "分钟", t.Minutes, t.TotalMinutes, 精确度, 粒度, 四舍五入, 保留零值位前缀)); if (仅保留最高有效位 && s.Length > 0) goto Output; s.Append(输出(时间粒度.秒, "秒", t.Seconds, t.TotalSeconds, 精确度, 粒度, 四舍五入, 保留零值位前缀)); if (仅保留最高有效位 && s.Length > 0) goto Output; s.Append(输出(时间粒度.毫秒, "毫秒", t.Milliseconds, t.TotalMilliseconds, 精确度, 粒度, 四舍五入, 保留零值位前缀)); //if (仅保留最高有效位 && s.Length > 0) goto Output; Output: return s.ToString(); }
/// <summary> /// 输出友好形式的时间字符串,如:65天17小时56分 或 12秒357毫秒 或 229分钟49秒 /// </summary> /// <param name="精确度">指示统计的精确程度,该值不可高于粒度</param> /// <param name="粒度">指示统计的最大粒度,该值不可低于精确度</param> /// <param name="保留零值位前缀">指示是否保留为0的前置高粒度位,如:0小时0分钟29秒311毫秒,否则显示为:29秒311毫秒</param> /// <param name="仅保留最高有效位">指示是否只保留最高位,如:6天 或 120分钟</param> /// <returns>友好形式的时间字符串</returns> public static string 转换为友好的日期时间格式(this TimeSpan t, 时间粒度 精确度, 时间粒度 粒度, bool 保留零值位前缀, bool 仅保留最高有效位) { return 转换为友好的日期时间格式(t, 精确度, 粒度, false, 保留零值位前缀, 仅保留最高有效位); }
static string 输出(时间粒度 处理级别, string 显示名, int 处理位显示值, double 处理位总值, 时间粒度 精确度, 时间粒度 粒度, bool 四舍五入, bool 保留零值前缀) { if (精确度 > 处理级别 || 粒度 < 处理级别 || (!保留零值前缀 && 处理位总值 < 1)) return null; if (粒度 > 处理级别) return 处理位显示值 + 显示名; return (四舍五入 && 精确度 == 粒度 ? 处理位总值.四舍五入(0) : (int)处理位总值) + 显示名; }