如何在C#字符串插值中避免重复使用日期格式字符串
避免重复日期格式字符串的几种方案
下面提供几个比你给出的变通方法更优雅的实现,不用重复写yyyy-MM-dd HH:mm:ss格式字符串:
扩展方法(推荐用于全局复用)
把日期格式封装成DateTime的扩展方法,整个项目都能直接调用,代码可读性拉满:public static class DateTimeExtensions { // 把格式字符串只定义一次 private const string DefaultDateTimeFormat = "yyyy-MM-dd HH:mm:ss"; public static string ToStandardString(this DateTime dateTime) { return dateTime.ToString(DefaultDateTimeFormat); } } // 调用方式 Console.WriteLine($"{DateTime.Now.ToStandardString()} {DateTime.Now.AddDays(1).ToStandardString()}");局部函数(适合单方法内临时复用)
如果只是在单个方法里需要这个格式,不用定义全局扩展,写个局部函数就行:void YourMethod() { // 局部函数封装格式逻辑 string FormatDateTime(DateTime dt) => dt.ToString("yyyy-MM-dd HH:mm:ss"); Console.WriteLine($"{FormatDateTime(DateTime.Now)} {FormatDateTime(DateTime.Now.AddDays(1))}"); }自定义格式提供器(适合全局统一格式场景)
如果整个项目都要统一用这个日期格式,可以自定义格式提供器,一次性搞定所有日期格式化:public class StandardDateTimeFormatter : IFormatProvider, ICustomFormatter { public object GetFormat(Type formatType) { return formatType == typeof(ICustomFormatter) ? this : null; } public string Format(string format, object arg, IFormatProvider formatProvider) { if (arg is DateTime dateTime) { // 没指定格式就用默认的,指定了就用用户给的格式 return string.IsNullOrEmpty(format) ? dateTime.ToString("yyyy-MM-dd HH:mm:ss") : dateTime.ToString(format); } return arg?.ToString() ?? string.Empty; } } // 调用方式 var formatter = new StandardDateTimeFormatter(); Console.WriteLine(string.Format(formatter, "{0} {1}", DateTime.Now, DateTime.Now.AddDays(1)));
内容的提问来源于stack exchange,提问作者Pragmateek
相关产品推荐
相关产品推荐

