[英]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.