“DateTime.Now” - 为啥它返回 GMT?

Posted

技术标签:

【中文标题】“DateTime.Now” - 为啥它返回 GMT?【英文标题】:"DateTime.Now" - why does it return GMT?“DateTime.Now” - 为什么它返回 GMT? 【发布时间】:2010-12-13 17:21:16 【问题描述】:

我在 Win2003 服务器上运行,TimeZone 设置为 (GMT -06:00) Central Time。我正在使用 VS.NET 2005,f/x 2.x 进行编程。当我执行以下代码时,我没有得到预期的结果——但只有当它在 PROD 服务器上时。任何其他机器似乎都可以正常工作。

_response.Timestamp = DateTime.Now;

是否有隐藏在某处的设置可以对 .NET Web 应用程序执行此操作?我查看了所有可以找到的配置,但没有看到任何内容。


注意:这发生在我们所有的服务器上...


注意:我尝试使用传入页面的日期:

[parameter 3] (Date): Thu Nov 05 22:23:16 MST 2009  // Web client time
LastPlayed (Date): Fri Nov 06 05:23:16 MST 2009  // Simple boxing of value

public class FlashObject

    #region Declarations
    public DateTime LastPlayed;
    public List<PlayList> Characters;
    public List<PlayList> Variations;
    #endregion

上面的物体只是像这样水合的:

internal static void GetPlayer(FlashObject flashObject, DateTime clientPlayTime)

注意它们都在 MST(山地标准时间)!! :(

【问题讨论】:

改变文化信息(或地方)有什么不同吗? 不。我已经检查了我能想到的一切。服务器上的 TZ 设置为山区时间,时间设置正确,区域设置正确,我们所有的浏览器都没有覆盖,等等。 很多个月前,我在俄罗斯客户的机器上就有过这种行为。原来是 Windows 本身的问题。 Windows 的副本是俄语,因此除了俄语之外的任何语言或时间都是不可能的!没有任何 UI 文化或对 Windows 的更改产生盲目的差异。不幸的是,这对您没有任何帮助。 :( 【参考方案1】:

_request 是什么?

在内部,在HttpContext 对象上,反射器显示以下代码:

public DateTime get_Timestamp()

    return this._utcTimestamp.ToLocalTime();

【讨论】:

_request 是我在我的应用程序中定义的对象。它主要是一个结构类型对象,内部还有进一步的结构类型对象和集合。没有任何方法,它只是为了在应用程序中携带格式良好的数据。【参考方案2】:

经过大量研究,我已将 DateTime 变量更改为 DateTimeOffset 变量。我还更改了 Flash/Flex 代码以传入 TZ 名称和偏移量。有了这些信息,我可以准确地跟踪客户时间。

private void SetUserInfo(DateTimeOffset ClientTime, int Offset)

    if (Offset != 0 && ClientTime.DateTime == ClientTime.UtcDateTime)
    
        ClientTime = ClientTime.AddHours(Offset);
        _actionDateTime = new DateTimeOffset(ClientTime.DateTime, new TimeSpan(Offset, 0, 0));
    
    else
        _actionDateTime = ClientTime;

    _actionUtcDateTime = new DateTimeOffset(_actionDateTime.DateTime.ToUniversalTime(), new TimeSpan(0, 0, 0));

通过上面的代码,我现在可以节省客户端时间以及 UTC 时间。

【讨论】:

任何在 .NET 应用程序中处理时间的人都应该这样做,只要他们使用 .NET 3.5 或更高版本。不幸的是,那些仍然针对旧版本 CLR 的人被窃听了。

以上是关于“DateTime.Now” - 为啥它返回 GMT?的主要内容,如果未能解决你的问题,请参考以下文章

为啥 DateTime.Now 和 DateTime.UtcNow 不是我当前的本地日期时间?

为啥 DateTime.Now 是属性而不是方法?

python: 为啥 datetime.now() 的 tzinfo 没有? [复制]

为啥 datetime 为同一时区提供不同的时区格式?

如何在 C# 中使用 DateTime.Now.Ticks 保持精度

iter() 不适用于 datetime.now()