我想比较两个日期。
从这两个日期开始,我只使用ToShortDateString()
获取日期组件,如下所示。现在的问题是我在比较这两个日期。它的投掷错误 -
“运算符> =无法应用于字符串和字符串类型的操作数。”
DateTime srtdate = Convert.ToDateTime(allitem["StartDate"].Text.ToString());
DateTime srtdate = Convert.ToDateTime(allitem["StartDate"].Text.ToString());
(DateTime.Now.ToShortDateString() >= srtdate.ToShortDateString())
我需要比较日期组件,而不是日期和时间。
请建议替代方式。感谢
致JON: -
(我通过你所解释的所有内容,并希望了解你实际上要做的是什么。只是为了澄清更多并进行最后检查,我将展示一个例子。) 我有一个Web界面,我给出了一个XYZ名称的开始日期和结束日期(注意我只能在这里输入日期,而不是时间)。
开始日期 - 2012年2月22日和结束日期 - 2012年2月22日
现在在后端(代码),如果开始日期和结束日期与当前日期相同或当前日期在开始日期和结束日期之间,我想要设置ACTIVE标志,否则。我给出了这样的条件: -
if ((DateTime.Today >= strdate.Date) && (DateTime.Today <= enddate.Date))
lblCondition.Text = "CHECKED";
现在我调试代码时,
DateTime.Today 和 strdate.Date 都会将值设为2/22/2012 12:00:00 AM。
所以,Jon我的问题是: - '今天'和'约会'是否按照上述要求工作,其中只使用了日期组件。我希望它会。
非常感谢您之前的所有解释。
答案 0 :(得分:7)
为什么要转换为字符串表示?如果您只想将日期部分与两个DateTime
值进行比较,请在每个值上使用Date
属性:
if (x.Date >= y.Date)
Today
属性相当于DateTime.Now.Date
。
Date
和Today
都剥离时间部分,留下午夜时间。你仍然有一个能够表示时间的类型并不理想,但这只是DateTime
API的工作方式:(
请注意,您应该避免在网络应用中使用DateTime.Now
或DateTime.Today
,除非您真的使用系统默认时区作为日边界。用户对“今天”的想法可能与服务器的想法不同。
除非你的目标是真的才能获得文字表示,否则你应该避免使用字符串转换。
当然另一种选择是使用我正在构建的日期/时间库,Noda Time,您可以使用LocalDate
类型 - 显然这样可以更清楚地表明您只对此感兴趣在日期而不是时间。
编辑:由于OP似乎不相信Date
真的 忽略时间组件,这是一个例子:
using System;
public class Test
{
static void Main()
{
// Two DateTime values with different times but
// on the same date
DateTime early = new DateTime(2012, 2, 22, 6, 0, 0);
DateTime late = new DateTime(2012, 2, 22, 18, 0, 0);
Console.WriteLine(early == late); // False
Console.WriteLine(early.Date == late.Date); // True
}
}
答案 1 :(得分:3)
DateTime.Today >= strdate.Date
一些想法
请考虑以下示例:您需要比较以下数字1.5和2.5。这些在.Net中表示为十进制,双精度或浮点数,但让我们使用十进制。更大的是2.5
假设您需要比较这些数字的整数部分(1.和2.)。您仍然会使用decimal type to do the comparison.
Math.Truncate(x) ? Math.Truncate(y) // x = 1.5, y = 2.5
与DateTime相同。由于Math.Truncate返回“真实”数字的整数部分,DateTime.Date
将返回日期的“整数”部分,但两者都将基于其原始类型。
答案 2 :(得分:0)
希望这会对你有所帮助。
using System;
public class Example
{
public static void Main()
{
DateTime date1 = new DateTime(2009, 8, 1, 0, 0, 0);
DateTime date2 = new DateTime(2009, 8, 1, 12, 0, 0);
int result = DateTime.Compare(date1, date2);
string relationship;
if (result < 0)
relationship = "is earlier than";
else if (result == 0)
relationship = "is the same time as";
else
relationship = "is later than";
Console.WriteLine("{0} {1} {2}", date1, relationship, date2);
}
}
// The example displays the following output:
// 8/1/2009 12:00:00 AM is earlier than 8/1/2009 12:00:00 PM