我有一位客户想要将午夜表示为前一天的结束。
实施例
var date = DateTime.Parse("1/27/2010 0:00");
Console.WriteLine(date.ToString(<some format>));
显示:
1/26/2010 24:00
我认为这在ISO 8601标准中有效。 (see this)
有没有办法在.net中支持这个(没有丑陋的字符串操作黑客攻击)?
答案 0 :(得分:7)
我猜你需要为日期定制格式化程序。查看IFormatProvider
和ICustomFormatter
接口。
答案 1 :(得分:3)
您可以设置扩展方法,但正确的方法可能是将IFormatProvider用作Lucero suggested。扩展方法将与日期的Date property进行比较,后者返回时间组件设置为午夜的日期。它类似于:
public static class Extensions
{
public static string ToCustomFormat(this DateTime date)
{
if (date.TimeOfDay < TimeSpan.FromMinutes(1))
{
return date.AddDays(-1).ToString("MM/dd/yyyy") + " 24:00";
}
return date.ToString("MM/dd/yyyy H:mm");
}
}
然后使用:
调用它var date = DateTime.Parse("1/27/2010 0:00");
Console.WriteLine(date.ToCustomFormat());
编辑:根据评论更新。