C#比较两个日期时间的正确方法
我有以下代码。它在大多数情况下都能工作,但今天我遇到了一种情况,即C#比较两个日期时间的正确方法,c#,datetime,comparison,C#,Datetime,Comparison,我有以下代码。它在大多数情况下都能工作,但今天我遇到了一种情况,即到期日为2017年09月30日00:00:00小于currentDateTime,后者位于string中,如10/15/2016 14:34:19?我刚才比较为string,我这边的bug是什么 System.DateTime expiration_date = newVer.License.Status.Expiration_Date; DateTime currentDateTime = DateTime.Now;
到期日
为2017年09月30日00:00:00
小于currentDateTime
,后者位于string
中,如10/15/2016 14:34:19
?我刚才比较为string
,我这边的bug是什么
System.DateTime expiration_date = newVer.License.Status.Expiration_Date;
DateTime currentDateTime = DateTime.Now;
currentDateTime.ToString("MM/dd/yyyy HH:mm:ss");
int a = expiration_date.ToString("MM/dd/yyyy HH:mm:ss")
.CompareTo(currentDateTime.ToString("MM/dd/yyyy HH:mm:ss"));
//MessageBox.Show("int a is :" + a);
if (expiration_date.ToString("MM/dd/yyyy HH:mm:ss")
.CompareTo(currentDateTime.ToString("MM/dd/yyyy HH:mm:ss")) < 1)
{
crossDate = 1;
MessageBox.Show("Cross Date Alert"+ " Expiry Date Is :"+
expiration_date.ToString("MM/dd/yyyy HH:mm:ss")
+ " "+"Current Date Is :"+
currentDateTime.ToString("MM/dd/yyyy HH:mm:ss"));
}
System.DateTime expiration\u date=newVer.License.Status.expiration\u date;
DateTime currentDateTime=DateTime.Now;
currentDateTime.ToString(“MM/dd/yyyy HH:MM:ss”);
int a=到期日ToString(“MM/dd/yyyy HH:MM:ss”)
.CompareTo(currentDateTime.ToString(“MM/dd/yyyy HH:MM:ss”);
//Show(“inta是:+a”);
if(到期日至字符串(“MM/dd/yyyy HH:MM:ss”)
.CompareTo(currentDateTime.ToString(“MM/dd/yyyy HH:MM:ss”)<1)
{
交叉日期=1;
MessageBox.Show(“交叉日期警报”+”到期日期为:“+
到期日ToString(“MM/dd/yyyy HH:MM:ss”)
+“”+“当前日期为:”+
currentDateTime.ToString(“MM/dd/yyyy HH:MM:ss”);
}
比较日期示例:
DateTime d1 = DateTime.Now;
DateTime d2 = DateTime.Now.AddDays(1);
if ( d2.CompareTo(d1)>0 )
Console.WriteLine("d2>d1");
else
Console.WriteLine("d2<=d1");
DateTime d1=DateTime.Now;
DateTime d2=DateTime.Now.AddDays(1);
如果(d2.与(d1)>0相比)
控制台写入线(“d2>d1”);
其他的
Console.WriteLine(“d2您的问题有两个部分的答案。可能有更简单的答案,但是:
首先,将字符串转换为DateTime对象。DateTime类有几个方法可以帮助您完成此操作。请尝试使用ParseExact
然后,将DateTime对象转换为Unix时间戳
现在,您有两个长整数,可以进行比较,并将整数比较转换为另一个DateTime,然后从中获取内容。不要转换为字符串
DateTime expiration_date = newVer.License.Status.Expiration_Date;
if (expiration_date.CompareTo(DateTime.Now) < 1)
{
MessageBox.Show("Cross Date Alert"+ " Expiry Date Is :"+ expiration_date.ToString("MM/dd/yyyy HH:mm:ss") + " "+"Current Date Is :"+ currentDateTime.ToString("MM/dd/yyyy HH:mm:ss"));
}
DateTime expiration\u date=newVer.License.Status.expiration\u date;
如果(到期日与(日期时间现在)<1)
{
MessageBox.Show(“交叉日期警报”+“到期日期为:“+expiration\u Date.ToString”(“MM/dd/yyyy HH:MM:ss”)+“+”当前日期为:“+currentDateTime.ToString”(“MM/dd/YYYYY HH:MM:ss”);
}
比较日期时间,就像比较数字一样,例如
DateTime expiration_date = newVer.License.Status.Expiration_Date;
DateTime currentDateTime = DateTime.Now;
if( expiration_date < currentDateTime)
{
// expired
}
您还可以使用两个日期的日差
int daydiff = (int)((currentDateTime - expiration_date).TotalDays)
.NET为此提供了一个很好的方法,可以使用datetime.compare()
方法比较两个datetime对象。datetime.compare()
方法使用两个datetime对象,比较日期和时间,或其中一个,并返回一个整数值
我在这里用一段示例代码演示了这一点:您必须比较日期
而不是字符串
。日期或日期和时间哪一个更好?@user5313398我认为只使用日期更好,除非您也需要时间。@user5313398您也可以使用两个日期的日差。DateTime更精确。它即使您只使用日期,我也会满足您的需求。这是一种微不足道的评论,但如果(expiration_date>currentDateTime)仍然有效。我的意思是,较旧的日期比较新的日期小:)您应该直接比较日期,而不是将日期转换为字符串。如果您仍然坚持在比较之前转换为字符串,则应使用随日期增加而增加的格式,即“yyyy/MM/dd HH:MM:ss”“
无需坚持将两个日期转换为字符串来比较两个日期。因为转换,实际上是“慢”的。除非您无法更改某个值的域,否则不要更改该值的域。@user5313398,您完成了吗?
int daydiff = (int)((currentDateTime - expiration_date).TotalDays)