比较.net中的日期
本文关键字:日期 net 比较 | 更新日期: 2023-09-27 18:25:19
我想比较两个日期。从这两个日期中,我只使用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日
现在在后端(代码)中,如果开始日期和结束日期与当前日期相同,或者当前日期介于开始日期和终止日期之间,我希望设置ACTIVE标志,否则不设置。我给出的条件是:-
if ((DateTime.Today >= strdate.Date) && (DateTime.Today <= enddate.Date))
lblCondition.Text = "CHECKED";
现在当我调试代码时,
DateTime.Tayday和strdate.Date都给出了2012年2月22日12:00:00 AM的值。
所以,Jon我的问题是:-"今天"answers"日期"是否能按照上述要求工作,其中只使用了日期组件。我希望它会。
非常感谢你之前的解释。
为什么要转换为字符串表示?如果只想将日期部分与两个DateTime
值进行比较,只需对每个值使用Date
属性即可:
if (x.Date >= y.Date)
并且Today
的性质等价于DateTime.Now.Date
。
Date
和Today
都去掉了时间部分,留下了午夜时间。仍然有一个能够表示时间的类型并不理想,但这正是DateTime
API的工作方式:(
请注意,您通常应该避免在web应用程序中使用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
}
}
DateTime.Today >= strdate.Date
一些想法
考虑以下示例:您需要比较以下数字1.5和2.5。这些在.Net中表示为十进制、双精度或浮点,但我们使用十进制。较大的是2.5
假设你需要比较这些数字(1)的积分部分。和2.)。您仍将使用十进制类型进行比较。
Math.Truncate(x) ? Math.Truncate(y) // x = 1.5, y = 2.5
与DateTime相同。DateTime.Date
将返回日期的"整数"部分作为Math。Truncate返回"实数"的整数部分,但两者都将基于其原始类型。
希望这对您有所帮助。
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