【问题标题】:DateTime.Now/UtcNow Default Culture - Client or Server?DateTime.Now/UtcNow 默认文化 - 客户端还是服务器?
【发布时间】:2023-04-10 10:35:01
【问题描述】:

我知道如何指定文化、日期格式、时区等...

我的问题是,当您在 C# 中键入 DateTime.Now 或 DateTime.UtcNow 时,它是使用运行服务器端代码的 Web 服务器的文化,还是使用客户端语言/文化发出请求的网络浏览器?

令我惊讶的是,从我的测试来看,这个服务器代码 DateTime.Now 似乎没有使用 Web 服务器的文化。但实际上是在网络浏览器中使用客户端 Lang/Cult!?

web.config 中是否有指定 DateTime.Now/UtcNow 默认在我的 Web 服务器的文化中运行?我只希望在专门为客户编写代码时应用客户文化。

【问题讨论】:

    标签: c# datetime culture


    【解决方案1】:

    DateTime.NowDateTime.UtcNow 根本没有任何 文化。只有当您将其格式化为字符串时,它才会使用一种文化……而使用哪种文化取决于您如何格式化它。为了在您的代码中清楚,只需明确指定文化,例如

    string text = DateTime.UtcNow.ToString(CultureInfo.InvariantCulture);
    

    但是,DateTime.Now 使用系统本地时区(即服务器上的时区)。这与用于格式化的文化是正交的。

    【讨论】:

    • 感谢乔恩的回复!但是,我不认为这是完全正确的。如果我的浏览器指定了 en-GB,则 DateTime.UtcNow 显示 19/8/2014,即使运行代码的 Web 服务器是 en-US,所以它应该是 2014 年 8 月 19 日。似乎 DateTime.Now/UtcNow 实际上应用了浏览器的客户端文化,而不是运行它的服务器系统。这不可能是正确的......只是在日期对象上单步调试。
    • @user2378631:不,您将DateTime.UtcNow 误认为是“我将DateTime.UtcNow 转换为字符串时得到的文本”。这些是不同的东西。 DateTime 值本身没有文化,也不是文本。
    • 这只是单步调试日期对象的代码。
    • @user2378631:这就是调试器将值转换为字符串。它不是 DateTime 值本身固有的。
    • 好的,默认情况下客户端设置会影响服务器代码似乎很奇怪。调试中的所有服务器端 DateTime 对象属性都反映了浏览器的客户端文化 en-GB (19/8/2014),即使 Web 服务器正在运行 en-US (8/19/2014)。 CultureInfo.CurrentCulture 还展示了 en-GB 的客户端文化。不是我所期望的......但我感谢你的帮助!
    【解决方案2】:

    正如 Jon 所提到的,DateTime.UtcNow(或任何 DateTime)没有文化——它本质上是一个日期的 UInt64 表示,所以它只是一个数字。当它被转换为字符串以供显示(包括由您的调试器)时,就会应用一种文化。

    为了解决浏览器文化设置如何影响服务器上的文化设置的问题,您是否可以在 web.config 的 globalization 部分或在页面指​​令(http://msdn.microsoft.com/en-us/library/vstudio/bz9tc508(v=vs.100).aspx)?

    要让 ASP.NET 将 UI 文化和文化设置为当前浏览器设置中指定的第一种语言,请将 UICulture 和 Culture 设置为 auto。

    【讨论】:

    • 是的!你是对的,我将 web.config 从 auto 更改为 en-US,现在我的网站上一切正常。谢谢!这是一个很好的修复。
    猜你喜欢
    • 1970-01-01
    • 2010-09-29
    • 1970-01-01
    • 2015-11-04
    • 2018-06-06
    • 1970-01-01
    • 2011-04-30
    相关资源
    最近更新 更多