2

在我找到另一个论坛网站与我需要回答的完全相同的问题(但没有答案)之前,我并不期待描述这个问题。所以我的问题要归功于这个人......

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

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

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

有什么想法吗?

谢谢!

赛斯

4

1 回答 1

-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;
            }
        }
    }
于 2012-01-19T17:38:33.547 回答