首页 / C# / c#-LINQ中的时区转换
c#-LINQ中的时区转换
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了c#-LINQ中的时区转换,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1700字,纯文字阅读大概需要3分钟。
内容图文
![c#-LINQ中的时区转换](/upload/InfoBanner/zyjiaocheng/675/27d94259a895450abb59598a9374bc7c.jpg)
我一直在谷歌搜索一段时间,试图找到某种解决方案,但是运气不佳.
我正在尝试获取一组记录,这些记录对应于一天的数据量.一天的数据价值是4:00:00EST-3:59:59EST.当我向用户显示结果集时,我希望结果以用户的本地时间显示(在我的情况下为CST).除了以下内容,这通常不会很困难:
>我数据库中的时间戳都是格林尼治标准时间(GMT).
>数据库的本地时间在EST中.
>我的当地时间是CST.
由于数据库的时间在EST中,但是记录保存在GMT中,所以我不能简单地调用GETDATE()并进行调整.
还值得注意的是,我在C#中使用LINQ / Entity Framework 4.1 Code-First,而我要使用的数据库是Sybase.
那么,鉴于上述信息,对我来说,将数据从GMT转换为用户本地时间的可靠方式是什么?
解决方法:
事实证明,我对此考虑得太多了,解决方案实际上很简单.以下链接非常有帮助:
http://iamacamera.org/default.aspx?section=develop/code%20snippets&id=76
http://msdn.microsoft.com/en-us/library/ms973825.aspx
在查询数据库之前,我设置了以下变量:
DateTime utcBeginDateTime = DateTime.UtcNow.Date.AddHours(8);
DateTime utcEndDateTime = utcBeginDateTime.AddDays(1);
这使我的UTC时间为5/10/2012 8:00:00到5/11/2012 8:00:00 AM.将此转换为EST非常简单:
TimeZoneInfo estZone = TimeZoneInfo.FindSystemTimeZoneById("Eastern Standard Time");
DateTime cstTime = TimeZoneInfo.ConvertTimeFromUtc(utcBeginDateTime, estZone);
这将使我的EST时间为5/10/2012 4:00:00 AM.
在我的LINQ查询中使用它:
var timeQuery = from p in db.cl_contact_event
where p.time_of_contact >= utcBeginDateTime && p.time_of_contact < utcEndDateTime
select new
{
time = TimeZoneInfo.ConvertTimeFromUtc(p.time_of_contact.Value, estZone),
id = p.id
};
除非您使用.AsEnumerable()在客户端上运行查询,否则TimeZoneInfo.ConvertTimeFromUtc()可能无法工作毫无价值.我知道它绝对不适用于我们的Sybase版本.因此,我被迫尽可能多地过滤结果,调用.AsEnumerable(),然后进行时区转换/其他逻辑.
内容总结
以上是互联网集市为您收集整理的c#-LINQ中的时区转换全部内容,希望文章能够帮你解决c#-LINQ中的时区转换所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。