【问题标题】:Build error on DateTime.UtcNow.ToString("o")DateTime.UtcNow.ToString("o") 上的构建错误
【发布时间】:2018-12-17 15:48:51
【问题描述】:

当我的代码中有这个时,为什么 .NET Core(2.1 版)会在 dotnet build 上抛出错误(不仅仅是警告)

var timestamp = DateTime.UtcNow.ToString("o");

Program.cs(78,8):错误 CA1305:“DateTime.ToString(string)”的行为可能因当前用户的区域设置而异。将 'Program.SendMessagesForever(ModuleClient, CancellationToken)' 中的调用替换为对 'DateTime.ToString(string, IFormatProvider)' 的调用。

我的理解是"o" 无论如何都不是本地敏感的?!

这是期望的行为吗?如果是这样,您将如何解决这个问题?为这个毫无意义的任务实例化一个 FormatProvider 对我来说似乎非常不必要。

【问题讨论】:

    标签: c# .net-core


    【解决方案1】:

    使用静态CultureInfo.InvariantCulture 属性:

    var timestamp = DateTime.UtcNow.ToString("o", 
                        System.Globalization.CultureInfo.InvariantCulture);
    

    【讨论】:

    • 感谢您的简短解决方案!我实际上会在我的代码中这样做,因为我发现它比放入 pragma 更好。我有点矛盾,我会继续接受@CodeCaster 的回答,尽管它实际上解释了这个问题。
    【解决方案2】:

    我的理解是“o”无论如何都不是本地敏感的?!

    不是,但代码分析工具不知道。

    来自CA1305: Specify IFormatProvider

    何时禁止显示警告

    当确定默认格式是正确的选择并且代码可维护性不是重要的开发优先级时,禁止来自该规则的警告是安全的。

    所以你可以安全地为DateTime.UtcNow.ToString("o"); 抑制它。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-01-17
      • 2022-07-13
      • 2014-11-17
      • 1970-01-01
      • 2015-05-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多