我有这段代码:
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,为什么它会抱怨它是字符串?
答案 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
是一个字符串,所以你想要稍微更改代码以保持原样,然后引入一个新变量,该变量是该变量的字符串表示。这是否是一个好主意取决于具体情况。