我想要做的是让用户输入日期并拥有一个返回该月最后一天的课程。所以,我把它放在我的课程模块中:
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<form id="frmProfile">
<input type="text" value="name" />
<input type="submit" value="Go" />
</form>
在我的代码隐藏中,我有这个:
public static class StringExtensions
{
public static DateTime LastDayOfMonth(DateTime MyDate)
{
DateTime today = MyDate;
DateTime EOM = new DateTime(today.Year,today.Month,
DateTime.DaysInMonth(today.Year,
today.Month));
return EOM;
}
}
我也尝试过硬编码日期:
DateTime LDOM = StringExtensions.LastDayOfMonth(txtCIT.Text);
我收到了这些错误:
错误14最佳重载方法匹配 'ClientDPL.StringExtensions.LastDayOfMonth(System.DateTime)'有一些 无效的参数
和
错误15参数1:无法从'string'转换为'System.DateTime'
谁能看到我做错了什么?
答案 0 :(得分:4)
您正在尝试将String
参数传递给需要DateTime
参数的方法。那么你首先需要parse你的价值:
var textCitValue = DateTime.Parse(txtCIT.Text);
DateTime LDOM = StringExtensions.LastDayOfMonth(textCitValue);
更好的方法是使用永不抛出异常的安全方法DateTime.TryParse
DateTime textCitDateTime;
if(DateTime.TryParse(txtCIT.Text, out textCitDateTime))
{
DateTime LDOM = StringExtensions.LastDayOfMonth(textCitValue);
// your logic here
}
else
{
// handle invalid textbox date here
}
另外,你的命名不清楚。您的StringExtensions
类的方法不是扩展方法,并使用DateTime
作为参数。最好重命名您的课程并更改下一个LastDayOfMonth
签名:
public static class DateTimeExtensions
{
public static DateTime LastDayOfMonth(this DateTime date) { ... }
}
然后,您可以将此方法称为DateTime
公共实例方法:
DateTime LDOM = textCitValue.LastDayOfMonth();
您还可以将方法签名更改为public static DateTime LastDayOfMonth(string date)
,但会为您的方法中断single responsibility principle。
答案 1 :(得分:3)
您的方法期望参数为DateTime
。
在你的电话中:
DateTime LDOM = StringExtensions.LastDayOfMonth(txtCIT.Text);
和
DateTime LDOM = StringExtensions.LastDayOfMonth('1/12/2016');
在这两种情况下,您都没有传递DateTime
。在调用函数之前,您需要将string
转换为DateTime
。
这里有很多方法:Converting a String to DateTime
答案 2 :(得分:1)
正如@mason在评论中所指出的,一个更好的方法是使用类似于的DateTime扩展方法:
public static class DateTimeExtensions
{
public static DateTime LastDayOfMonth(this DateTime date)
{
DateTime EOM = new DateTime(
date.Year,date.Month,
DateTime.DaysInMonth(
date.Year,
date.Month
)
);
return EOM;
}
}
可以像:
一样使用Console.WriteLine(DateTime.Now.LastDayOfMonth());
在行动中查看:
答案 3 :(得分:1)
希望我不仅仅是通过提出这个答案来重新陈述这个问题并提前道歉,但我会更加知情地宣布两种类型的扩展,如下所示(注意{{1返回由问号表示的类型):
Nullable
然后在代码中使用它:
public static class StringExtensions
{
public static DateTime LastDayOfMonth(this DateTime self)
{
return new DateTime(self.Year, self.Month, DateTime.DaysInMonth(self.Year, self.Month));
}
public static DateTime? LastDayOfMonth(this string self)
{
DateTime dt;
if (!DateTime.TryParse(self, out dt))
return null;
return dt.LastDayOfMonth();
}
}