【问题标题】:Datetime to string: differents behavior depending on the converted datetime日期时间到字符串:不同的行为取决于转换后的日期时间
【发布时间】:2017-08-21 14:44:36
【问题描述】:

我使用这个 C# 代码将日期时间转换为字符串:

MyDatetime.ToString("dd/MM/yyyy HH:mm")

它有效,但不是每次都有效。什么意思?

如果输入日期时间是,例如,2016-10-19 17:27:41.727,我会得到预期的字符串,19/10/2016 17:27。如果日期时间(和/或月份)中的日期只有一位,我会得到一些奇怪的东西。

如果输入是2016-01-07 14:58:13.560,我得到1/7/2016,如果是2016-10-26 17:14:16.000,我得到10/6/2016

你知道为什么吗?我怎样才能总是为只有一位数字的几天和几个月设置前导零?此外,为什么我没有看到我写的日期中的时间部分作为示例?

更新

来自 SQL Server 数据库(这是 SQL Server Management Studio)的一些日期时间字段。

【问题讨论】:

  • 输入值是String类型还是DateTime类型?
  • 你能给我们一个重现这个问题的最小例子吗?目前,我看不出您遇到的问题是如何描述的。
  • 如果你解析这个输入,很可能你解析错了。 MyDatetime.Day 可能也会返回错误的值
  • @ChetanRanpariya 输入是我数据库中的日期时间对象
  • 我在我的本地机器上运行了你的代码,它运行良好并生成了预期的输出。我使用 ADO.NET 来检索值并使用 SQLDataReader.GetDateTime 来获取 DateTime 变量中的值。您可以通过 EF 检查您为 2016-01-07 14:58:13.560 获得的 DateTime 值吗?我假设 MyDateTime 是您示例中从数据库中检索到的实际值。

标签: c# datetime type-conversion tostring date-format


【解决方案1】:

当您输入日期为“XXXX-XX-XX”时,它假定您使用的是“YYYY-MM-DD”格式。

只要看看你的输入输出,你就能看到模式。 很多编程人员(与我一起工作)都使用这种格式,因为它可以自动过滤,没有任何标点符号(20170102 总是在 20161231 之后,等等)。

【讨论】:

    【解决方案2】:

    很可能您的 DateTime 已经有无效值(日期和月份是混合的)

    new DateTime(2016, 01,  07,14,58,13,56).ToString("dd/MM/yyyy HH:mm")
    

    返回07-01-2016 14:58

    看看你是如何从数据库中读取这个 DateTime 值的。我相信问题就在那里。 (例如SqlDataReader.GetDateTime

    【讨论】:

    • 我使用 Entity Framework 读取值,如果我使用调试导航 datetime 对象,它似乎是正确的
    • 我不明白你如何获得不同的输出。尝试指定文化,如`myDateTime.ToString("dd/MM/yyyy HH:mm", CultureInfo.InvariantCulture)`
    • @PieroAlberto 上面的代码你得到了什么输出?
    • CultureInfo.InvariantCulture 似乎解决了这个问题
    【解决方案3】:

    DateTime 方法与计算机语言结合使用。如果您的计算机(或服务器)是英文的(反之亦然)并且您传递的是美国非标准日期格式,您将遇到这样的问题。 如果您使用的是 Web 应用程序,请在 web.config 中配置正确的语言

    【讨论】:

      猜你喜欢
      • 2015-09-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-08-18
      • 1970-01-01
      • 2016-05-03
      • 1970-01-01
      相关资源
      最近更新 更多