繁体   English   中英

如何获得.NET WinForms组件以使用SET时区而不是客户端时区?

[英]How do I get .NET WinForms components to use a SET timezone instead of clients time zone?

在我找到另一个我需要回答的“完全相同”问题的论坛网站之前,我一直不希望描述这个问题,所以我很想问这个人归功于这个家伙

我们有一个大型Windows .Net应用程序(winform可执行文件),该应用程序已安装在客户端的桌面上。 此应用程序在不同时区的服务器上调用Web服务。 几乎所有面向日期的组件都会检测时区差异并自动调整日期时间值(在SQL查询生成的数据集中返回),这通常在大多数应用程序中是理想的,但会导致与“日期”而非“日期时间”相关的与会计相关的应用程序出现问题。 我们只对“日期”部分感兴趣。 但是,日期1/1/2003 GMT-5会自动转换为客户端上的12/31/2002 11:00 GMT-6。 与其通过浏览所有代码并提取UniversalTime来返回2003年1月1日以用于视觉目的,我们不如简单地通过使客户端可执行文件与时区处于同一时区中,来“伪造”客户端可执行文件的时区。服务器。

问:是否可以仅通过编程方式为当前正在运行的实例设置TimeZone,而不是为全局设置?

我真的没有什么要补充的,因为这是我们的确切问题。 在我们的案例中,我们有ActiveReports,它们将远程SQL数据提取到数据集中,然后将报表绑定到数据集。 例如,生日是错误的,因为我们要为它们存储日期,而在西方时区中将X小时减去该日期? 因此,生日要减去-1。

有什么想法吗?

谢谢!

赛斯

我们解决此问题的方法是序列化日期的字符串表示形式。

字符串日期的属性实现在实际日期属性之间进行适当的转换。

例如:

    [NonSerialized]
    public DateTime MyDate { get; set; }

    [System.Xml.Serialization.XmlAttribute("MyDate")]
    public string MyDateString
    {
        get
        {
            if (MyDate.Equals(DateTime.MinValue))
            {
                return string.Empty;
            }
            else
            {
                return MyDate.ToShortDateString();
            }
        }
        set
        {
            DateTime dtTemp = DateTime.MinValue;
            if (DateTime.TryParse(value, out dtTemp))
            {
                MyDate = dtTemp;
            }
            else
            {
                MyDate = DateTime.MinValue;
            }
        }
    }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM