截止日期24:00(午夜)

时间:2010-01-27 20:35:08

标签: c# .net datetime

我有一位客户想要将午夜表示为前一天的结束。

实施例

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中支持这个(没有丑陋的字符串操作黑客攻击)?

2 个答案:

答案 0 :(得分:7)

我猜你需要为日期定制格式化程序。查看IFormatProviderICustomFormatter接口。

Thisthis也可以提供帮助。

答案 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());

编辑:根据评论更新。