【问题标题】:C# incorrectly formatting DateTimeC# 错误地格式化 DateTime
【发布时间】:2013-05-22 12:44:24
【问题描述】:

我有一个使用 Visual Studio 2012 编写的针对 .Net 4.5 的 Web 应用程序,过去它是通过构建解决方案、压缩然后 ftp 到生产服务器上手动部署的。

我希望自动执行此部署,因此我有一个托管 Jenkins CI 的构建服务器,我使用它使用 MSBuild.exe 构建源代码,然后运行 ​​NUnit 测试。

当我在本地运行我的构建脚本时,它运行良好并且所有测试都通过了。但是,当我在构建服务器上运行脚本时(没有安装 Visual Studio,但有 SDK)构建成功,但是一些单元测试失败了。

我调查了这些故障,结果发现出现了一些奇怪的问题,例如日期格式不起作用。

myRequest.Date = new DateTime(1970, 2, 1)
...
myRequest.Date.ToString("dd-MM-yyyy"));

在我的本地机器上,这可以正常工作并将日期格式化为 01-02-1970。但是在构建机器上,测试失败,因为日期格式为 02-01-1970

【问题讨论】:

  • 您是否检查过两台机器上的 Windows 区域设置是否相同?
  • 我不确定,但我遇到了同样的问题,我不得不在 web.config 中将 Culture 指定为 UK。第二个选项是在服务器上设置文化区
  • 我试试换地区!
  • 更改位置不起作用,我去了 Region -> Location 并将其更改为 United Kingdom,这是正确的地方吗?
  • myRequest 是什么类型的变量?请发布更多代码...

标签: c# datetime formatting


【解决方案1】:

您已经明确指定了日-月-年的顺序,所以我不相信您会得到您所说的结果。例如。以下所有文化都会给出相同的结果,“01-02-1970”:

string usDate = date.ToString("dd-MM-yyyy", new CultureInfo("en-US"));
string deDate = date.ToString("dd-MM-yyyy", new CultureInfo("de-DE"));
string gbDate = date.ToString("dd-MM-yyyy", new CultureInfo("en-GB"));

更改区域设置或CurrentCulture 对我来说是“货物狂热编程”的味道。相反,我建议您在导致问题的构建机器上进行调试并准确跟踪正在发生的事情 - 您确定您没有查看代码中的错误位置吗?

【讨论】:

  • 我的任务是在不接触代码的情况下自动化构建、测试和部署过程。因此更新构建服务器上的区域设置的结果
  • @lisburnite,我的观点是,我不相信您确定的代码行会返回您所说的结果,并且我不相信更改区域设置会有任何影响。所以调试以找出真正发生的事情。
【解决方案2】:

我必须将构建服务器上的区域设置更改为与我的本地计算机相同。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-11-30
    • 2019-10-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-20
    • 1970-01-01
    相关资源
    最近更新 更多