【发布时间】:2017-06-05 18:28:15
【问题描述】:
我在 DateTime 类上有扩展方法:
public static DateTime? SafeConvertToDateTime(this string value, bool dateOnly)
{
DateTime parsedDateTime;
if (DateTime.TryParse(value, out parsedDateTime))
{
return DateTime.SpecifyKind(parsedDateTime, DateTimeKind.Utc);
} else {
return new DateTime(1, 1, 1, 0, 0, 0, DateTimeKind.Utc);
}
}
如果“dateOnly=true”,我应该返回只有 Date 属性的 Datetime,并且如果 DateTime 只有 Date,那么以后在客户端(到本地或 utc)上的所有转换都应该被跳过。 但是我怎么知道这个 DateTime 只包含 Date(因为时间可以有效为 0)? 我可以添加扩展属性(dateOnly),但据我所知,我不能在 C# 中添加扩展属性,只有方法? 我可以使用 Datetime 的一些现有属性来判断,只有日期应该在代码中稍后考虑吗?
【问题讨论】:
-
为什么不直接使用 DateTime.Date 是你以后的代码?如果代码不应该依赖于时间部分,那么请确保它只引用日期部分。
-
这不是 DateTime 类的扩展方法,这是对字符串类的扩展。
-
如果你
return DateTime.Date;,则只返回日期部分,时间部分=0 -
如果您有一个
DateTime实例并且您只想获取日期,则有一个名为Date的属性会将时间归零到午夜。另外,如果您总是返回DateTime实例,为什么还要返回可为空的DateTime??您可能应该在if的else部分返回null。最后使用c#7,您可以将TryParse(value, out parsedDateTime)内联为TryParse(value, out DateTime parsedDateTime) -
对不起,是字符串类的扩展方法。我必须以某种方式在 DateTime 中定义您应该只查看 Date 的一部分。
标签: c#