【问题标题】:C# date format string using windows setting instead of string passed to itC# 日期格式字符串使用 windows 设置而不是传递给它的字符串
【发布时间】:2020-08-27 19:07:44
【问题描述】:

我希望 ToString("MM/dd/yyyy") 忽略系统设置并始终按定义输出格式。如果我将 Windows 10 日期字符串设置为 08/27/2020 格式,则以下测试通过,但如果我将其设置为 2020-08-27 格式并出现以下错误,则测试失败。

我错过了什么吗?

[Test]
public void TestDate() {
Assert.AreEqual("08/08/2020", (new DateTime(2020, 8, 8)).ToString("MM/dd/yyyy"));
}

结果

String lengths are both 10. Strings differ at index 2.
Expected: "08/08/2020"
But was:  "08-08-2020"

【问题讨论】:

  • 如果您希望 ToString 忽略系统设置,您需要自己提供一种文化,例如ToString("MM/dd/yyyy", CultureInfo.InvariantCulture);.

标签: c# .net


【解决方案1】:

好的,在键入此内容时,我看到了这项工作。我仍然这是一个问题。

[Test]
public void TestDate() {
    Assert.AreEqual("08/08/2020", (new DateTime(2020, 8, 8)).ToString(@"MM\/dd\/yyyy"));
}

“MM'/'dd'/'yyyy”下面的 Per cmets 也可以。

【讨论】:

  • 这不是一种解决方法。这是设计使然,因此这是预期的操作过程(有多种方法可以转义格式字符串中的特殊字符)。 / 字符是特定于区域性的日期分隔符的占位符,在 documentation 中进行了讨论。
  • “/”字符被 DateTimeFormatInfo.CurrentInfo.DateSeparator 替换。这是设计使然,你可以逃避它,但我不明白你到底想通过这个测试实现什么。
  • @KonstantinBorisov 我正在将查询中的日期发送到另一台服务器,我使用格式字符串来格式化日期。当我在计算机上运行单元测试时,由于日期无效,它们都失败了。我进行了调查,发现在我的系统上日期以一种方式格式化,而在另一台计算机上它们以另一种方式格式化。我编写了这个简单的测试,以便在我更改系统上的系统日期格式时进行检查。该测试没有其他有用的目的,只是为了演示问题。
  • @JohnHughes,那么我会说您的测试完全按照应有的方式运行。由于您需要确保您的系统日期格式有斜线作为分隔符,所以当您有破折号时它会失败。您可能想要更新线程的分隔符(但看起来您的测试再次按预期工作):stackoverflow.com/questions/56899198/…
猜你喜欢
  • 1970-01-01
  • 2014-04-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-06-25
  • 1970-01-01
相关资源
最近更新 更多