当我在代码中包含此内容时,为什么.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似乎是不必要的。
答案 0 :(得分:3)
我的理解是“ o”是否对本地不敏感?!
不是,但是代码分析工具不知道。
来自CA1305: Specify IFormatProvider:
何时禁止显示警告
当可以确定默认格式是正确的选择,并且代码可维护性不是重要的开发重点时,可以从该规则中取消警告。
因此您可以放心地DateTime.UtcNow.ToString("o");
取消它。
答案 1 :(得分:2)
使用静态CultureInfo.InvariantCulture
属性:
var timestamp = DateTime.UtcNow.ToString("o",
System.Globalization.CultureInfo.InvariantCulture);