【问题标题】:c# DateTime convert to stringc# DateTime 转换为字符串
【发布时间】:2011-02-24 03:08:14
【问题描述】:

我有一个结果集,其中一些时间存储在 DateTime 变量中。如果值为 null,我想将 var 设置为字符串“Still logged in”。

我已经尝试了一些 toString() 的东西,但还没有运气。

这是不起作用的代码。 queryResult.Egresstime 是 DateTime 类型,不能是字符串。

if (Convert.IsDBNull(rdr["timeOut"]))
                {
                    queryResult.Egresstime = "Still logged in";
                }

【问题讨论】:

    标签: c# datetime tostring


    【解决方案1】:

    这似乎是设计上的一个缺陷,但如果你绝对必须保持这样,你可以将它设置为一个可笑的过去的精确日期,并在渲染日期之前检查以呈现“仍然登录”,如果它是那个特定的日期。这是一种糟糕的设计方式!

    【讨论】:

    • 这正是我所做的,很容易发现到 1111 年 1 月 1 日
    • 我同意,糟糕的设计,但我过去曾这样做过。我们通常使用数据库最早的日期并赋予其特殊含义。
    【解决方案2】:

    你在这里不走运 - 你不能将字符串分配给DateTime 类型的属性。这种方式根本行不通。

    【讨论】:

      【解决方案3】:

      您不能将字符串分配给 DateTime。

      也许您需要另一个字段来指示时间是否有效,如果不是,则显示“仍然登录”文本?

      如果您能够将 EgressTime 更改为可为空的 DateTime (DateTime?),则可以使用 null 表示该值不存在。

      【讨论】:

        【解决方案4】:

        您不能将字符串存储到 Datetime 中! 但是你可以这样做

        Datetime? Egresstime ;
        
        DateTime timeOut;
        if(!DateTime.TryParse(rdr["timeOut"], out timeOut))
        {
            Egresstime  = null;
        }
        If(Egresstime ==null)
        {
        //print still logged in
        }
        

        【讨论】:

          【解决方案5】:

          您可以将其设为object 而不是DateTime

          我要做的是将 Egresstime 设为可为空的 DateTime (DateTime?) 并将其设置为 null

          if (Convert.IsDBNull(rdr["timeOut"]))
          {
              queryResult.Egresstime = null;
          }
          

          然后在我将其输出到我的报告/UI/其他任何东西之前,我会检查是否为空。

          Egresstime.Text = queryResult.Egresstime == null ? "Still logged in" : Egresstime.ToString();
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2021-03-31
            • 2014-01-15
            • 2011-10-16
            • 2016-03-17
            • 1970-01-01
            • 2011-05-04
            • 1970-01-01
            • 2014-03-01
            相关资源
            最近更新 更多