C# 如何使.NET WinForms组件使用设置的时区而不是客户端时区?

C# 如何使.NET WinForms组件使用设置的时区而不是客户端时区?,c#,.net,winforms,web-services,activereports,C#,.net,Winforms,Web Services,Activereports,我并不期待着描述这个问题,直到我发现另一个论坛网站与我需要回答的问题完全相同(但没有答案)。因此,值得赞扬的是,这里是我的问题 我们有一个大型Windows.Net应用程序(winform可执行文件),它 在客户端的桌面上安装。此应用程序调用web 服务器上位于不同时区的服务。几乎所有日期 定向组件检测时区差异并自动 调整日期时间值(在SQL生成的数据集中返回 查询),这在大多数应用程序中通常是可取的,但 导致与“日期”相关的会计应用程序出现问题 不以“日期时间”为导向。我们只对“日期”部分感兴

我并不期待着描述这个问题,直到我发现另一个论坛网站与我需要回答的问题完全相同(但没有答案)。因此,值得赞扬的是,这里是我的问题

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

问题:我们能否以编程方式设置当前时间的时区 是否仅运行实例,而不是全局设置

我真的没有什么要补充的,因为这正是我们的问题。在本例中,我们使用ActiveReports将远程SQL数据提取到数据集中,然后将报告绑定到数据集。比如说,生日是错误的,因为我们存储了生日的日期,而X小时在西方时区减去了日期?因此,出生日期被减去1

有什么想法吗

谢谢


Seth解决这个问题的方法是序列化日期的字符串表示形式

字符串日期的属性实现执行与实际日期属性之间的适当转换

例如:

    [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;
            }
        }
    }

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

字符串日期的属性实现执行与实际日期属性之间的适当转换

例如:

    [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;
            }
        }
    }

非常感谢您的回复。我并没有怀疑我将不得不重新设计我们的应用程序来支持这一点。我错过了什么?非常感谢你的回复。我并没有怀疑我将不得不重新设计我们的应用程序来支持这一点。我错过了什么?你使用的是什么版本的.NET?.NET2中对System.DateTime和时区进行了一些更改(添加了System.DateTime.Kind)。假设它是DateTime,System.DateTime.Kind的值是多少?数据库中的数据类型是什么(例如sql server有几个选项)?您是在客户机上运行查询(并将其放入System.Data.DataSet中),还是只对ActiveReports进行查询?客户机上的数据类型是什么?System.DateTime或System.DateTimeOffset?您使用的是哪个版本的.NET?.NET2中对System.DateTime和时区进行了一些更改(添加了System.DateTime.Kind)。假设它是DateTime,System.DateTime.Kind的值是多少?数据库中的数据类型是什么(例如sql server有几个选项)?您是在客户机上运行查询(并将其放入System.Data.DataSet中),还是只对ActiveReports进行查询?客户机上的数据类型是什么?System.DateTime还是System.DateTimeOffset?