使用经度纬度和日期时间的地方的未来当地时间

时间:2010-07-08 04:45:51

标签: c# asp.net datetime

我正在开发旅行申请表。

为此我需要使用Datetime(未来日期),经度和纬度来计算位置的未来本地日期时间。 (例如:我想在2010年8月10日上午11点23分计算某个地点的当地日期时间。由于白天节约时间,日期时间偏移可能会发生变化,所以我需要将8月10日上午11.23转换为当地时间位置的时间)我有输入经度,纬度和日期时间。 我可以使用经度和纬度计算当前的本地日期,但由于白天节省时间设置**,因此无法准确计算**未来日期。 off set可能会在将来的日期有所不同。

我正在使用asp.net和c#。

任何人都可以帮忙吗?

3 个答案:

答案 0 :(得分:1)

以下是微软关于DateTime best practices in .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

答案 1 :(得分:1)

我怀疑这会非常困难 - 我不知道任何将纬度和经度转换为时区名称的服务。

  • 了解标准偏移和DST偏移无济于事,因为您不知道它们何时适用。
  • 了解国家(甚至国家和语言)并没有帮助,因为你不会知道这个地区。
  • 即使有确切的位置,你也必须有一个非常准确的服务来将地球上的每个可能点映射到正确的时区

您可能最好使用一些启发式方法来猜测哪些设置时区是可能的,然后询问用户它实际上是哪一个。目前您最好的选择可能是使用TimeZoneInfo:当Noda Time准备好投入生产时,这将是一个更好的选择。 (我希望 - 这是我的项目。)

获得TimeZoneInfo(或Noda时间ITimeZone)后,使用DateTimeDateTimeOffset(或ZonedDateTime野田)。它正确地从时区开始,这很棘手。

编辑:我刚发现this SO question表示Geonames可能是您的朋友。如果它为您提供了Olson时区名称,我不会感到惊讶 - 所以您要么必须使用转换器来计算Windows时区ID,或类似的东西。 (如果你对使用预发布的Noda感兴趣,请告诉我;这一点非常稳定AFAIK。)

请注意,由于政治变化,您的问题无法得到肯定的回答。有时政府会在几乎没有警告的情况下对时区进行更改。例如,几年前Argentina gave 11 days notice他们不会去观察DST。此外,政治边界可能会随着时间而移动。基本上你必须希望不会发生这种情况。

答案 2 :(得分:0)

我假设您使用经度计算GMT偏移量,但听起来您需要做的就是这样。

  1. 使用Lat,Long计算出目的地的国家/地区(
  2. 使用该Locale获取未来日期,并查看其GMT偏移量,包括任何DST偏移量(已经有一段时间了,因为我看过这是C#,但我确定它非常明显)。
  3. 一旦您知道了Locale的GMT和DST偏移量,就可以非常简单地完成您需要做的任何事情。
  4. 请记住,DST由一个国家控制,通常是通过立法控制,并且可能会发生变化。大多数日期代码库都试图使这些信息保持最新,但它可以在短期内改变。例如:2000年在澳大利亚新南威尔士州改变其夏令时,使美国和欧洲观众更容易接触到奥运会。