确定给定纬度、经度、日期的历史 UTC 偏移量

Determine historical UTC offset given lat, long, date

随着时间的推移,一些位置的变化改变了时区(和 UTC 偏移量)- 肯塔基州路易斯维尔在 1949 年处于 CST (-6),但目前是 EDT (-4): https://www.timeanddate.com/time/zone/usa/louisville?year=1945

大多数 lat/long 库将 return 当前时区,但我需要确定历史时区和 UTC 偏移量,给定 lat/long 和 UTC 日期。

nodatime(包括 Tzdb Olson 历史数据)是否具有此功能或可能与其他库结合使用?

您可以结合使用 NodaTime and 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 年之前日期的准确性。