我正在开发一个旅行应用程序。
为此,我需要使用日期时间(未来的日期)、经度和纬度来计算一个位置的未来本地日期时间。(例如:我想计算8月10日-2010年上午11点23分的一个地点的当地日期。由于日照节省时间,日期偏移可能会改变,所以我需要将8月10日-2010年上午11点23分转换为当地时间的位置),我有输入经度,纬度和日期时间。i可以使用经度和纬度计算当前的本地日期,但由于日照节省时间设置**,所以无法精确计算**未来日期。离集可能在未来的日期不同。
我正在使用asp.net和c#。
有人能帮忙吗?
发布于 2010-07-08 05:00:11
下面是微软关于DateTime在.NET的最佳实践的文章,它涵盖了日照节约时间的本地化。
简而言之,确保您使用的是通用时间和GMT偏移量。这个
DateTime.ToUniversalTime()方法将任何现有的DateTime对象转换为UTC版本。请记住,UTC根据经度来偏移工作--主要经络是经度零,所以有GMT偏移量= 0。对于加利福尼亚,你的GMT偏移量将是负800。
此外,您还可以获取浏览器的区域设置,并根据该区域确定时区:
http://madskristensen.net/post/Get-language-and-country-from-a-browser-in-ASPNET.aspx
发布于 2010-07-08 05:23:44
我怀疑这将是相当困难的-我不知道有任何服务将纬度和经度转换为时区名称。
您最好使用一些启发式方法来猜测哪些时区是可能的,然后询问用户它实际上是哪一组时区。目前,您最好的选择可能是使用TimeZoneInfo:当野田时间准备好用于生产时,这将是一个更好的选择。(我希望--这是我的项目。)
一旦获得了TimeZoneInfo (或Noda Time ITimeZone),其余的就相对容易使用DateTime或DateTimeOffset (或Noda中的ZonedDateTime )。它得到的时区是正确的开始,这是很棘手的。
编辑:我刚找到这个问题,这表明Geonames可能是你的朋友。不过,如果这为您提供了Olson时区名称,我也不会感到惊讶--所以您必须使用转换器来计算Windows时区ID,或者类似的东西。(如果您有兴趣使用Noda的预发行版,请告诉我;这部分内容相当稳定。)
请注意,由于政治上的变化,你的问题不能得到肯定的回答。有时,政府会在几乎没有任何预警的情况下对时区做出改变。例如,几年前,阿根廷发出11天通知表示他们不会观察DST。此外,政治界限会随着时间的推移而移动。基本上你得希望那不会发生。
发布于 2010-07-08 04:58:17
我想你是用经度来计算GMT偏移量,但听起来你需要做的是这样的事情。
请记住,DST是由一个国家控制的,通常是由立法控制的,而且会发生变化。大多数日期代码库试图保持此信息的最新,但它可以在短期内改变。例如:在2000年,新南威尔士州,在澳大利亚,改变了它的DST,使奥运会更容易为美国和欧洲观众。
https://stackoverflow.com/questions/3200722
复制相似问题