C# 比较月份
我正在尝试检查所选月份是否已经过去C# 比较月份,c#,datetime,C#,Datetime,我正在尝试检查所选月份是否已经过去 if (Convert.ToDateTime(DDMonths.SelectedItem.Text).Month > DateTime.Now.Month) { //logic here if date is not in the past } DDMonths.SelectedItem.Text值为April 但是,我收到以下格式异常错误: 字符串未被识别为有效的日期时间 这意味着你的台词 Convert.ToDateTime(DDMo
if (Convert.ToDateTime(DDMonths.SelectedItem.Text).Month > DateTime.Now.Month)
{
//logic here if date is not in the past
}
DDMonths.SelectedItem.Text
值为April
但是,我收到以下格式异常错误:
字符串未被识别为有效的日期时间
这意味着你的台词
Convert.ToDateTime(DDMonths.SelectedItem.Text)
这是给你的错误。你应该使用
DateTime.ParseExact(DDMonths.SelectedItem.Text,"MMMM",CultureInfo.InvariantCulture);
这意味着你的台词
Convert.ToDateTime(DDMonths.SelectedItem.Text)
这是给你的错误。你应该使用
DateTime.ParseExact(DDMonths.SelectedItem.Text,"MMMM",CultureInfo.InvariantCulture);
您可以使用以下内容按名称解析月份:
DateTime.ParseExact(DDMonths.SelectedItem.Text, "MMMM", CultureInfo.CurrentCulture ).Month
但是,如果可能的话,最好将
DDMonths
中每个元素的值改为与月份对应的整数值。您可以使用以下内容按名称解析月份:
DateTime.ParseExact(DDMonths.SelectedItem.Text, "MMMM", CultureInfo.CurrentCulture ).Month
但是,如果可能的话,最好将DDMonths
中每个元素的值改为与月份对应的整数值。转换。ToDateTime
无法理解日期格式,您需要改为使用:
Convert.ToDateTime
无法理解日期格式,您需要改用:
您应该使用DateTime
DateTime.ParseExact("April", "MMMM", CultureInfo.InvariantCulture).Month // outputs 4
您还应该尝试使用值
(DDMonths.SelectedItem.Value)组件,并根据需要填充它您应该使用日期时间
的变量
DateTime.ParseExact("April", "MMMM", CultureInfo.InvariantCulture).Month // outputs 4
您还应该尝试使用Value
(DDMonths.SelectedItem.Value)组件,并根据需要填充它,这样您的下拉列表项
的文本就不能转换为当前区域性的日期时间
。因此,可能您正在显示月份名称(我假设的),或者错误更为复杂。您可以使用列表项.Value
以特定格式存储日期时间,例如:
“yyyyymmdd”
->“20130726”
然后您可以通过以下方式对其进行分析:
var dt = DateTime.ParseExact("20130726", "yyyyMMdd", CultureInfo.InvariantCulture);
如果要允许monthname:
dt = DateTime.ParseExact("July", "MMMM", CultureInfo.InvariantCulture);
因此,您的下拉列表项的文本
在当前区域性下不能转换为日期时间
。因此,可能您正在显示月份名称(我假设的),或者错误更为复杂。您可以使用列表项.Value
以特定格式存储日期时间,例如:
“yyyyymmdd”
->“20130726”
然后您可以通过以下方式对其进行分析:
var dt = DateTime.ParseExact("20130726", "yyyyMMdd", CultureInfo.InvariantCulture);
如果要允许monthname:
dt = DateTime.ParseExact("July", "MMMM", CultureInfo.InvariantCulture);
既然您只是在查找月份的数字,为什么要将其解析为DateTime
?您可以直接从DateTimeFormatInfo
获取它:
string input = "April";
var months = DateTimeFormatInfo.CurrentInfo.MonthNames;
var monthNumber = 1 + Array.FindIndex(months, x => x.Equals(input, StringComparison.CurrentCultureIgnoreCase));
if (monthNumber > DateTime.Now.Month)
{
// ...
}
如果现在是4月,一定要想一想你想做什么。根据您正在执行的操作,您可能希望使用=
进行比较
此外,如果您正在编写一个桌面应用程序,那么这段代码(以及其他代码)就可以了。但是,如果您正在编写web应用程序,并且此代码正在服务器端运行,那么您还有两个问题:
- 文化应该与输入相匹配。您可能需要使用不同的区域性,或者
不变量区域性
- 您正在与
DateTime.Now
-进行比较,后者将位于服务器的时区中。因此,如果世界其他地区的用户在新的一个月的第一天使用此功能,而您的服务器仍在前一天,那么您的比较将失败
既然您只是在查找月份的数字,为什么要将其解析为日期时间?您可以直接从DateTimeFormatInfo
获取它:
string input = "April";
var months = DateTimeFormatInfo.CurrentInfo.MonthNames;
var monthNumber = 1 + Array.FindIndex(months, x => x.Equals(input, StringComparison.CurrentCultureIgnoreCase));
if (monthNumber > DateTime.Now.Month)
{
// ...
}
如果现在是4月,一定要想一想你想做什么。根据您正在执行的操作,您可能希望使用=
进行比较
此外,如果您正在编写一个桌面应用程序,那么这段代码(以及其他代码)就可以了。但是,如果您正在编写web应用程序,并且此代码正在服务器端运行,那么您还有两个问题:
- 文化应该与输入相匹配。您可能需要使用不同的区域性,或者
不变量区域性
- 您正在与
DateTime.Now
-进行比较,后者将位于服务器的时区中。因此,如果世界其他地区的用户在新的一个月的第一天使用此功能,而您的服务器仍在前一天,那么您的比较将失败
肯定是一条路要走。节省解析日期的时间,并引入数据/表示分离。使用下拉列表中的值
跟踪月份编号,并使用文本
以用户选择的任何语言显示姓名。然后您只需执行if(DDMonths.SelectedItem.Value>DateTime.Now.Month)
。这绝对是一个好方法。节省解析日期的时间,并引入数据/表示分离。使用下拉列表中的值
跟踪月份编号,并使用文本
以用户选择的任何语言显示姓名。然后您只需执行if(DDMonths.SelectedItem.Value>DateTime.Now.Month)
。