如何比较日期时间和字符串?

7

我有一个字符串,里面包含了一个时间(从数据库获取):

string user_time = "17:10:03"; //Hours:minutes:seconds
DateTime time_now = DateTime.Now;

我该如何将这个字符串与DateTime进行比较?我想要实现以下功能:
if(time_now > user_time)
{
    //Do something
}
else
{
  //Do something
}
6个回答

20

DateTime支持比较,但首先需要解析日期时间字符串,DateTime.Parse()应该就足够了:

var dateTimeStr = "17:10:03";
var user_time = DateTime.Parse( dateTimeStr );
var time_now = DateTime.Now;

if( time_now > user_time )
{
  // your code...
}

请记住,比较日期/时间有时需要意识到时区,才能使比较具有意义。


2
问题在于DateTime.Now包含日期,而“17:10:03”不包含。请按照以下方式操作:
    Dim dbaseTime As TimeSpan = TimeSpan.Parse("17:10:03")
    If DateTime.Now.TimeOfDay > dbaseTime Then
        Console.WriteLine("Let's go home")
    End If

尽一切可能将字符串列类型转换为日期时间列。


Hans,这实际上不是问题,因为当传递一个只包含时间的字符串到 DateTime.Parse(string) 时,该方法会假定当前日期,因此可以与 DateTime.Now 进行比较而没有任何问题。 - Allon Guralnek
@Allon:啊,我没意识到。我想知道下一个维护代码的人是否也知道这个。 - Hans Passant
下一个人可能不会发现这个潜在的“陷阱”(我没有发现),但如果他像你一样有敏锐的眼光并且发现了它,他会想知道当解析只包含时间的字符串时日期将被设置为什么,并在检查MSDN文章DateTime.Parse(string)时找到答案。 - Allon Guralnek

1

不行,因为他没有 DateTime 的实例。 - Darin Dimitrov
@stakx,DateTime.Parse最初并不是这个答案的一部分,至少在我发表评论时不是。 - Darin Dimitrov

1

DateTime.Parse会将字符串转换为DateTime对象,您可以使用它来进行比较。


1
if (DateTime.Now > DateTime.Parse(user_time))
{
   ...
}

但是你真的不应该将时间存储为字符串,而应该使用数据库的本地时间或日期时间格式,这样你就可以在查询中使用时间值,并正确地对它们进行索引。


我猜那是用户输入,OP正在验证 - 否则,让我们希望那不是来自数据库的数据。 - James Westgate
在问题被编辑之前,他明确表示他从数据库中获取了一个字符串,并且该字符串包含了他想在if语句中使用的时间。 - Allon Guralnek

0
if (time_now > Date.Parse(DBString)) {

} else {

}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接