具有可空变量的Dateformat

Las*_*vik 0 c#

我有这个代码:

 startWeekDate = startWeekDate == null ? DateTimeHelpers.calcMondayDate(DateTime.Now) : DateTimeHelpers.calcMondayDate(startWeekDate.Value);
 DateTime endWeekDate = startWeekDate.Value.AddDays(6);
Run Code Online (Sandbox Code Playgroud)

startWeekDate是一个可以为空的参数.这很好用,但是我想用以下格式对它进行格式化:String.Format("{d:0}",....)但是当我拍它时,我得到错误.

无法将类型'string'隐式转换为'System.DateTime?

我该如何解决这个问题?

/ M

编辑:

我试图将此添加到函数中,因为它应该总是在没有时钟的情况下返回dateformat,但是我在这段代码中得到了同样的错误:

    public static DateTime calcMondayDate(DateTime input)
    {
        int delta = DayOfWeek.Monday - input.DayOfWeek;
        DateTime monday = String.Format("{d:0}", input.AddDays(delta));

        return monday;
    }
Run Code Online (Sandbox Code Playgroud)

无法将类型'string'隐式转换为'System.DateTime'

嗯,但输入是DateTime,为什么它抱怨它是字符串?

Jon*_*eet 8

你已经证明代码不会有问题,但不是代码确实有问题.请显示不编译的代码.这听起来像你想分配一个DateTime?变量的字符串值,如

startWeekDate = string.Format(...);
Run Code Online (Sandbox Code Playgroud)

这绝对不会起作用.一旦你把它作为一个字符串,你真的希望它用格式化的值做什么?在你想要字符串的地方使用它,而不是你想要的地方DateTime?.

添加一件事 - 您的第一行可以更简单地表达:

startWeekDate = DateTimeHelpers.calcMondayDate(startWeekDate ?? DateTime.Now);
Run Code Online (Sandbox Code Playgroud)

编辑:现在你已经发布了你的代码,很明显为什么它不起作用 - 因为怀疑,你正在尝试为DateTime变量分配一个字符串值.

DateTime值没有格式.它们就像数字一样 - 它们的值不是固有的格式.就像0x10和16是相同的数字,只是写得不一样.

现在听起来你只是试图在没有时间的情况下返回日期 - 这样做更好:

return input.AddDays(delta).Date;
Run Code Online (Sandbox Code Playgroud)

Date物业返回的DateTime日期与日期相同,但午夜时间.

另一方面,令人遗憾的是,.NET具有一组受限制的日期/时间类型,因此您无法真正代表无时间日期的想法.我正试图解决这个问题,但它还有一段时间才能结出果实......