C# 函数仅返回日期

C# 函数仅返回日期,c#,asp.net,C#,Asp.net,我制作了一个函数,将文本框值转换为日期。 我想将转换后的日期存储在我的业务对象中的datetime字段中,格式为YYYY-MM-dd,只包含日期而不包含时间 我的功能是返回日期和时间 public static DateTime ExtractDate(string myDate) { DateTime result = DateTime.MinValue; if (myDate != null) { try { r

我制作了一个函数,将文本框值转换为日期。 我想将转换后的日期存储在我的业务对象中的datetime字段中,格式为YYYY-MM-dd,只包含日期而不包含时间

我的功能是返回日期和时间

public static DateTime ExtractDate(string myDate)
{
    DateTime result = DateTime.MinValue;
    if (myDate != null)
    {
        try
        {
            result=DateTime.Parse(myDate, new System.Globalization.CultureInfo("en-CA", true), System.Globalization.DateTimeStyles.AdjustToUniversal).ToString("yyyy-MM-dd");
        }
        catch (Exception)
        {
            throw new ApplicationException("DateTime conversion error");
        }
    }
    return (result.Date);
}

DateTime本身始终包含一个时间,如果将其设置为“日期”,则时间将为00:00:00。在显示字符串时,您需要使用仅包含日期部分的格式字符串。

只需使用:

result = DateTime.Parse(...).Date;
不需要先将日期/时间转换回字符串。生成的日期时间正好是相关日期的午夜

我看到你正在适应世界时-你需要意识到这可能会改变日期。日期本质上是本地的——也就是说,由于时区的原因,我的8月25日的开始时间可能与你的不同。或者,您可以从UTC开始解析它,并以这种方式处理它。你只需要小心你正在做的事情——你可能会遇到一些问题,在某些时区的某些日子里,午夜是不存在的。在那里,做了那件事

我还建议使用DateTime.TryParseExact并指定输入格式。特别是,如果您只希望用户输入日期,请指定适当的日期格式。使用TryParseExact而不是ParseExact意味着您不必捕捉异常以注意到用户未输入有效日期


编辑:只是澄清一下:.NET没有仅表示日期的类型。是的,但还没有准备好进行生产:通常您只需使用DateTime并忽略时间部分。

Date属性返回一个日期时间,时间设置为00.00:00。您不能从日期时间中删除时间,您可以避免在GUI中使用string.Formatd,yourDate来显示时间。

我会更改方法并返回一个字符串而不是日期时间,因为总有时间附加在名称DateTime上-

如果返回字符串,可以执行以下操作:

return DateTime-object.ToString("yyyy/MM/dd");

祝你好运

一直让我困惑的是,当你改变时区+/-一小时时会发生什么。那么日期会改变吗?@jdv:具体在哪里改变时区?谢谢你回复威尔。我想将结果存储在业务对象的Datetime字段中,但我只需要日期部分。我不想将业务对象类型更改为字符串。有什么办法吗?@Popo:在.NET中并没有表示日期的类型。@Popo:若您需要一个仅为日期的日期,请创建您自己的类-但您不能从DateTime继承,所以您需要封装一个DateTime实例,除非您想从头实现很多功能。@onof:我并没有注意到这一点,但我现在已经澄清了。基本上,将其转换回字符串是没有帮助的。无论我使用什么,因为我将结果存储在业务对象的DateTime字段中,所以结果都是一样的。感谢您提供的有用信息,我将在DB类级别使用tryParseExact函数;在我的业务对象内部。这个我必须传递到数据库层。你不能用日期时间。您使用的是哪个数据库?