【问题标题】:C# date part of dateTime extension propertydateTime 扩展属性的 C# 日期部分
【发布时间】: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??您可能应该在ifelse 部分返回null。最后使用c#7,您可以将TryParse(value, out parsedDateTime) 内联为TryParse(value, out DateTime parsedDateTime)
  • 对不起,是字符串类的扩展方法。我必须以某种方式在 DateTime 中定义您应该只查看 Date 的一部分。

标签: c#


【解决方案1】:

请参阅this question,了解如何检查日期时间字符串是否包含时间。您需要使用TimeOfDay 属性。

【讨论】:

  • 如果您找到另一个回答当前问题的帖子,请使用重复标记或投票关闭为重复。如果不确定发表评论。不要发布指向另一个问题的链接作为答案。
【解决方案2】:

但是我怎么知道这个 DateTime 只包含日期(因为时间可以 有效为 0)?

使用现有的 DateTime 类无法实现这一点 - 因为您将无法区分“日期”与“恰好在午夜的日期时间”。它们看起来完全一样。

The Date type 可能很有趣 - 但鉴于 DateTime 和 Date 是不同的类型,您需要更改代码以处理这两种类型。 Noda's LocalDate 也可能感兴趣。

如果您决定使用 Date 类型,您可以创建一个包含 日期或日期时间的包装类,并根据需要传递它:

public class DateWithOrWithoutTime
{
    public Date? DateWithoutTime { get; private set; }
    public DateTime? DateWithTime { get; private set; }

    public DateWithOrWithoutTime(Date dateToSet)
    {
        DateWithoutTime = dateToSet;
    }
    public DateWithOrWithoutTime(DateTime dateTimeToSet)
    {
        DateWithTime = dateTimeToSet;
    }

    public bool IsDate()
    {
        return DateWithoutTime != null;
    }

    public bool IsDateTime()
    {
        return DateWithTime != null;
    }
}

【讨论】:

  • @Simon 这是否符合您的预期?还是您需要不同的功能?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-12-06
  • 1970-01-01
  • 2010-10-11
  • 1970-01-01
  • 1970-01-01
  • 2023-02-07
  • 1970-01-01
相关资源
最近更新 更多