将datetime设置为字符串为ToLocalTime

时间:2013-07-07 20:34:35

标签: c# datetime

我正在使用c#mvc4。 每个具有创建日期成员的实体我将DateTime保存在我的数据库中作为DateTime.UtcNow,我有很多视图来显示实体和我的html:@ item.Created重复多次。我想要默认的ToString()将是ToLocalTime,有一个地方我可以声明这个吗?也许会覆盖默认的ToString()

3 个答案:

答案 0 :(得分:3)

是的,你当然可以覆盖ToString()方法。

有关详细信息,请参阅http://msdn.microsoft.com/en-us/library/ms173154(v=vs.80).aspx

但是 - 我建议使用扩展方法来实现您的需要,因为您可以在其他地方使用默认的ToString()扩展名。

/更新: 使用扩展方法允许datetime为空值(总是出错)。您可以在每个DateTime值上调用它。然后该方法检查它是否为空。在这种情况下,它返回一个string.empty,否则以您喜欢的格式返回Datetime。

public static string ToLocalString(this DateTime? date)
{
  if(date == null)
  {
     return String.Empty;
  }
  else
  {
   return date.ToLocalString().ToString();
  }
}

答案 1 :(得分:1)

我同意Serv的回答,你不应该为DateTime覆盖默认.ToString()并更好地使用扩展方法。只是想补充一点,您可以选择使用Property getter,如下所示:

private DateTime _created;
public DateTime Created
{
    get {
        return _created.ToLocalTime();
    }
}

但在我看来 - 扩展方法将是最佳选择。

答案 2 :(得分:0)

不,您无法覆盖.ToString()上的DateTime

DateTime是一个结构,而不是一个类。它是密封的。

扩展方法是个好主意,但不会自动调用。您必须在需要时拨打电话。

你说你只想要一个地方来全局改变DateTime.ToString()的行为。没有办法做到这一点,这样做可能会很危险。毕竟,您使用UTC值是有原因的。如果您想要本地值,请使用本地值。

我认为你可以实现这一目标的唯一方法是使用一些后期构建步骤,例如通常在像PostSharp这样的AOP框架中完成的步骤。您可以编写一个执行转换的方面。但同样,我强烈建议反对这个想法。