.net - 确定给定 lat、long、date 的历史 UTC 偏移量
问题描述
随着时间的推移,一些位置变化已经改变了时区(和 UTC 偏移量) - 肯塔基州路易斯维尔在 1949 年处于 CST (-6) 但目前是 EDT (-4): https ://www.timeanddate.com/time/zone/usa /路易斯维尔?年=1945
大多数 lat/long 库将返回当前时区,但我需要确定历史时区和 utc 偏移量,给定 lat/long 和 UTC 日期。
nodatime(包括 Tzdb Olson 历史数据)是否具有此功能,或者可能与另一个库结合使用?
解决方案
您可以结合NodaTime和GeoTimeZone来做到这一点。
using GeoTimeZone;
using NodaTime;
...
static Offset GetOffset(Instant instant, double lat, double lon)
{
string tzid = TimeZoneLookup.GetTimeZone(lat, lon).Result;
DateTimeZone tz = DateTimeZoneProviders.Tzdb[tzid];
return tz.GetUtcOffset(instant);
}
使用您的示例:
Instant instant = Instant.FromUtc(1945, 12, 31, 0, 0);
Offset offset = GetOffset(instant, 38.2527, -85.7585); // Louisville, KY, USA
Console.WriteLine(offset); // -06
请记住,结果与数据一样好。IANA tzdb 不保证 1970 年之前日期的准确性。
推荐阅读
- reactjs - 我需要将浏览器路由器一分为二
- javascript - 你如何在闪亮的 htmlwidget (jsoneditor) 上调用 javascript 方法?
- java - 如何在 JAVA 中将十进制值转换为 24 小时时间格式
- java - 循环内的 printf
- html - 我的图片在 github 页面和 netlify 中都没有加载到我的站点中
- microsoft-graph-api - Microsoft Graph API - Odata 筛选器
- python - 具有嵌套 for 循环、条件和累加器的列表理解
- javascript - 在 Vue.js 中渲染双花括号 {{ }} 内的元素
- gitlab - Gitlab:无法使用 URL 下载工件
- python - Python pipenv 无法导入'matplotlib.pyplot'