具有可空变量的日期格式

时间:2009-11-23 15:55:30

标签: c#

我有这段代码:

 startWeekDate = startWeekDate == null ? DateTimeHelpers.calcMondayDate(DateTime.Now) : DateTimeHelpers.calcMondayDate(startWeekDate.Value);
 DateTime endWeekDate = startWeekDate.Value.AddDays(6);

startWeekDate是一个可以为空的参数。这样做很好,但是我想用以下格式对它进行格式化:String.Format(“{d:0}”,....)但是当我在它周围拍打时我会收到错误。

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

我该如何解决这个问题?

/ M

编辑:

我正在尝试将此函数添加到函数中,因为它应该始终返回dateformat而不使用clock,但是我在这段代码中得到了同样的错误:

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

        return monday;
    }

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

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

3 个答案:

答案 0 :(得分:8)

您已经显示没有出现问题的代码,但 出现问题的代码没有出现。请显示不编译的代码。 声音就像你试图为DateTime?变量分配一个字符串值,例如

startWeekDate = string.Format(...);

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

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

startWeekDate = DateTimeHelpers.calcMondayDate(startWeekDate ?? DateTime.Now);

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

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

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

return input.AddDays(delta).Date;

Date属性返回DateTime,其日期相同,但午夜为时间。

另一方面,令人遗憾的是,.NET具有一组受限制的日期/时间类型,因此您无法真正代表无时间日期的想法。我正在尝试fix this situation,但它会结出果实......

答案 1 :(得分:1)

错误是“无法将字符串转换为DateTime”。

这正是这条线试图做的事情:

DateTime monday = String.Format("{d:0}", input.AddDays(delta));

正如我在上面的评论中所说,你在输出时格式化。在内部,日期时间只是一个数字,它没有格式的概念。您应该只返回input.AddDays(delta)

答案 2 :(得分:0)

您收到编译错误,因为您已将startWeekDate声明为DateTime,但string.Format返回一个字符串。一种可能的补救措施是更改声明:

string endWeekDate = string.Format("{d:0}", startWeekDate.Value.AddDays(6));

但是,现在endWeekDate是一个字符串,所以你想要稍微更改代码以保持原样,然后引入一个新变量,该变量是该变量的字符串表示。这是否是一个好主意取决于具体情况。