如何从日期中删除小时,分钟和秒

时间:2015-07-31 13:50:54

标签: c#

我有两种类型的日期,一种是DateTime格式,另一种是string格式,这两种日期的格式如下:

yyyy-MM-dd HH: mm: ss

我想删除HH: mm: ss,因为我需要在循环中比较这些日期以迭代数据库。问题是CalendarSelectionDate事件返回了其中一个日期,小时,分钟和秒甚至设置为0.任何人都有最好的方法吗?

更新

if (DateTime.TryParseExact(reader["data"].ToString(), "yyyy-MM-dd HH:mm:ss", CultureInfo.InvariantCulture,
                      DateTimeStyles.None, out dt)){...}

代码行为返回无效日期,特别是如果我已经12/05/15 ......代码将返回1/01/0001

3 个答案:

答案 0 :(得分:4)

如果您想在没有小时的情况下比较DateTime个对象,可以使用Date属性:

if (myDbDate.Date != myUserDate.Date) { }

您也可以使用ToString()将日期转换为字符串,但请注意,如果日期为字符串,则日期为notoriously very hard thing to deal with

if (myDbDate.ToShortDateString() != myUserDate) { }

或者如果您非常确定自己的格式,可以使用自定义日期格式:

if (myDbDate.ToString("yyyy-MM-dd") != myUserDate) { }

更新

根据我自己和个人的经验,自动将字符串解析为日期(DateTime.ParseTryParse)通常会产生非常随机的结果。您似乎永远不知道.Net将决定使用哪种格式(dd/MMMM/dd?)。

使用ParseExactTryParseExact解决了这个问题,并允许进一步处理日期(例如,添加天数)。但是,对于初始问题中的简单比较,因为您已经锁定了#34;代码中的日期格式,它没有太大变化(可能是性能方面,我不知道),并且将日期转换为字符串要比其他方式简单得多

话虽这么说,我继续假设比较是"是不同的"。如果比较是"晚于/早于",那么投射到某个日期确实是正确的解决方案。

答案 1 :(得分:2)

首先,您必须了解DateTime没有格式。它仅包含描述特定时间点的信息。格式适用于DateTime的字符串表示形式。根据您的需要,您可以使用DateTime.Date,它会返回具有相同年,月和日值的新DateTime,但时间设置为上午12点。与DateTime.ParseExact一起,您可以将string解析为DateTime,然后仅比较Date部分。

var someDate = DateTime.ParseExact(stringValue, "yyyy-MM-dd HH: mm: ss");
if(someDate.Date != otherDate.Date)
{

}

答案 2 :(得分:0)

要获取任何DateTime基础日期,只需使用Date属性。

DateTime.Now.Date