【问题标题】:How to set datetime with HH:mm:ss = 00:00:00 instead of 12:00:00?如何使用 HH:mm:ss = 00:00:00 而不是 12:00:00 设置日期时间?
【发布时间】:2011-01-27 09:13:46
【问题描述】:
DateTime a1 = new DateTime(Convert.ToDateTime(txtStartDate.Text).Year, Convert.ToDateTime(txtStartDate.Text).Month, Convert.ToDateTime(txtStartDate.Text).Day, 0, 0, 0);

我尝试将系统时间从 12 小时 HH 更改为 24 小时 HH 并重新启动 网站插入仍然是 12:00:00

我想要 00:00:00

【问题讨论】:

    标签: c# asp.net sql-server


    【解决方案1】:

    您看到的是格式问题,而不是数据问题。它确实是 00:00:00,但是您将其转换为字符串时将其显示为 12:00:00,可能带有隐含的“am”。不要忘记DateTime 实际上并没有格式 - 它只是日期/时间。您可以自己适当地格式化它,例如

    Console.WriteLine(a1.ToString("yyyy-MM-dd HH:mm:ss"));
    

    除此之外,我强烈建议您不要以这种方式创建DateTime。就个人而言,我更喜欢使用DateTime.TryParseExactDateTime.ParseExact,而不是使用“当前文化碰巧喜欢的任何模式”,但即使你确实想用Convert.ToDateTime 解析,它也会做一次比较清楚,然后使用Date属性获取时间设置为0的DateTime

    DateTime a1 = Convert.ToDateTime(txtStartDate.Text).Date;
    

    【讨论】:

      【解决方案2】:

      嗯,从技术上讲,没有时间是 00:00:00。 11:59:59 之后变为 12:00:00。也许我只是不明白你要做什么:)

      您的代码中可以有特殊的逻辑来修改它,如果它是 12:00:00,则将其显示为 00:00:00 或其他内容。但是开箱即用没有魔法或格式字符串可以做到这一点。

      【讨论】:

      • 错了。根据 24 小时时钟格式,午夜 12:00(12:00AM)实际上是 00:00:00。
      • @Yogesh,我知道。我想我不明白这个问题。我认为 HH 是代表 24 小时模式的方式,它与系统时间无关。那是怎么回事。
      【解决方案3】:

      您可以通过指定格式来简化这一点:

      DateTime a1 = DateTime.Parse(string.Format("{0} 00:00:00", "01/27/2011"),
                                               CultureInfo.GetCultureInfo("en-US"));
      

      我不知道您的文本框是什么格式,但假设它是 2011 年 1 月 27 日(美国格式),您可以更改上面的 sn-p 以轻松工作:

      DateTime a1 = DateTime.Parse(string.Format("{0} 00:00:00", txtStartDate.Text),
                                               CultureInfo.GetCultureInfo("en-US"));
      

      将您的CultureInfo.GetCultureInfo(它实现IFormatProvider)更改为您正在使用的那个。理想情况下,您应该将日期解析为 UTC 日期,但这是一个不同的讨论。

      【讨论】:

        【解决方案4】:

        当您想要将 DateTime 对象添加到字符串或想要以某种文本形式显示它时,会自动使用 ToString() 方法。 ToString() 使用“en-US”作为默认区域性。当然,您可以手动调用 ToString() 并使用您希望的任何 CultureInfo 对其进行参数化,但有时这是不可能的。

        例如,当您通过数据绑定访问 DateTime 对象时,您不能传递任何 CultureInfo 并最终得到一个本地化为“en-US”的日期字符串。在这种情况下,您需要为当前线程设置 CultureInfo,例如:

        Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture("de-DE");
        

        调用此行后,只要您不使用不同的 CultureInfo 手动调用 ToString(),所有日期都将本地化为“de-DE”。

        阅读此链接:https://msdn.microsoft.com/en-us/library/k494fzbf(v=vs.110).aspx

        【讨论】:

          【解决方案5】:

          你可以简化一下

          if (!string.IsNullOrEmpty(txtStartDate.Text))
                      {
                          string startDate = Convert.ToDateTime(txtStartDate.Text).ToString("yyyy-MM-dd HH:mm:ss", CultureInfo.InvariantCulture);
                      }
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2016-06-04
            • 1970-01-01
            • 1970-01-01
            • 2013-07-12
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多