我正在开发旅行申请表。
为此我需要使用Datetime(未来日期),经度和纬度来计算位置的未来本地日期时间。 (例如:我想在2010年8月10日上午11点23分计算某个地点的当地日期时间。由于白天节约时间,日期时间偏移可能会发生变化,所以我需要将8月10日上午11.23转换为当地时间位置的时间)我有输入经度,纬度和日期时间。 我可以使用经度和纬度计算当前的本地日期,但由于白天节省时间设置**,因此无法准确计算**未来日期。 off set可能会在将来的日期有所不同。
我正在使用asp.net和c#。
任何人都可以帮忙吗?
答案 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)
我怀疑这会非常困难 - 我不知道任何将纬度和经度转换为时区名称的服务。
您可能最好使用一些启发式方法来猜测哪些设置时区是可能的,然后询问用户它实际上是哪一个。目前您最好的选择可能是使用TimeZoneInfo
:当Noda Time准备好投入生产时,这将是一个更好的选择。 (我希望 - 这是我的项目。)
获得TimeZoneInfo
(或Noda时间ITimeZone
)后,使用DateTime
或DateTimeOffset
(或ZonedDateTime
野田)。它正确地从时区开始,这很棘手。
请注意,由于政治变化,您的问题无法得到肯定的回答。有时政府会在几乎没有警告的情况下对时区进行更改。例如,几年前Argentina gave 11 days notice他们不会去观察DST。此外,政治边界可能会随着时间而移动。基本上你必须希望不会发生这种情况。
答案 2 :(得分:0)
我假设您使用经度计算GMT偏移量,但听起来您需要做的就是这样。
请记住,DST由一个国家控制,通常是通过立法控制,并且可能会发生变化。大多数日期代码库都试图使这些信息保持最新,但它可以在短期内改变。例如:2000年在澳大利亚新南威尔士州改变其夏令时,使美国和欧洲观众更容易接触到奥运会。