const googleMapsClient; // instantiate your client here
const zipcode = '90210'
const myDateThatNeedsTZAdjustment; // define your date that needs adjusting
// fetch lat/lng from google api by zipcode
const geocodeResponse = await googleMapsClient.geocode({ address: zipcode }).asPromise();
if (geocodeResponse.json.status === 'OK') {
lat = geocodeResponse.json.results[0].geometry.location.lat;
lng = geocodeResponse.json.results[0].geometry.location.lng;
} else {
console.log('Geocode was not successful for the following reason: ' + status);
}
// prepare lat/lng and timestamp of profile created_at to fetch time zone
const location = `${lat},${lng}`;
const timestamp = new Date().valueOf() / 1000;
const timezoneResponse = await googleMapsClient
.timezone({ location: location, timestamp: timestamp })
.asPromise();
const timeZoneId = timezoneResponse.json.timeZoneId;
// adjust by setting timezone
const timezoneAdjustedDate = DateTime.fromJSDate(
myDateThatNeedsTZAdjustment
).setZone(timeZoneId);
var options = {
enableHighAccuracy: true,
timeout: 6000,
maximumAge: 0,
desiredAccuracy: 30,
fallbackToIP: true, // if HTML5 fails or rejected
addressLookup: true, // this will get full address information
timezone: true,
map: "my-map" // this will even create a map for you
};
geolocator.locate(options, function (err, location) {
console.log(err || location);
});
var d = new Date();
var usertime = d.toLocaleString();
//some browsers / OSs provide the timezone name in their local string
var tzsregex = /\b(ACDT|ACST|ACT|ADT|AEDT|AEST|AFT|AKDT|AKST|AMST|AMT|ART|AST|AWDT|AWST|AZOST|AZT|BDT|BIOT|BIT|BOT|BRT|BST|BTT|CAT|CCT|CDT|CEDT|CEST|CET|CHADT|CHAST|CIST|CKT|CLST|CLT|COST|COT|CST|CT|CVT|CXT|CHST|DFT|EAST|EAT|ECT|EDT|EEDT|EEST|EET|EST|FJT|FKST|FKT|GALT|GET|GFT|GILT|GIT|GMT|GST|GYT|HADT|HAEC|HAST|HKT|HMT|HST|ICT|IDT|IRKT|IRST|IST|JST|KRAT|KST|LHST|LINT|MART|MAGT|MDT|MET|MEST|MIT|MSD|MSK|MST|MUT|MYT|NDT|NFT|NPT|NST|NT|NZDT|NZST|OMST|PDT|PETT|PHOT|PKT|PST|RET|SAMT|SAST|SBT|SCT|SGT|SLT|SST|TAHT|THA|UYST|UYT|VET|VLAT|WAT|WEDT|WEST|WET|WST|YAKT|YEKT)\b/gi;
//in other browsers the timezone needs to be estimated based on the offset
var timezonenames = {"UTC+0":"GMT","UTC+1":"CET","UTC+2":"EET","UTC+3":"EEDT","UTC+3.5":"IRST","UTC+4":"MSD","UTC+4.5":"AFT","UTC+5":"PKT","UTC+5.5":"IST","UTC+6":"BST","UTC+6.5":"MST","UTC+7":"THA","UTC+8":"AWST","UTC+9":"AWDT","UTC+9.5":"ACST","UTC+10":"AEST","UTC+10.5":"ACDT","UTC+11":"AEDT","UTC+11.5":"NFT","UTC+12":"NZST","UTC-1":"AZOST","UTC-2":"GST","UTC-3":"BRT","UTC-3.5":"NST","UTC-4":"CLT","UTC-4.5":"VET","UTC-5":"EST","UTC-6":"CST","UTC-7":"MST","UTC-8":"PST","UTC-9":"AKST","UTC-9.5":"MIT","UTC-10":"HST","UTC-11":"SST","UTC-12":"BIT"};
var timezone = usertime.match(tzsregex);
if (timezone) {
timezone = timezone[timezone.length-1];
} else {
var offset = -1*d.getTimezoneOffset()/60;
offset = "UTC" + (offset >= 0 ? "+" + offset : offset);
timezone = timezonenames[offset];
}
//there are 3 variables can use to see the timezone
// usertime - full date
// offset - UTC offset time
// timezone - country
console.log('Full Date: ' + usertime);
console.log('UTC Offset: ' + offset);
console.log('Country Code Timezone: ' + timezone);
from shapely.geometry import Polygon, Point
def get_tz_from_lat_lng(lat, lng):
for tz, geojson in timezones.iteritems():
coordinates = geojson['features'][0]['geometry']['coordinates']
polygon = Polygon(coordinates)
point = Point(lng, lat)
if polygon.contains(point):
return tz
17条答案
按热度按时间z5btuh9x1#
来自guppy:
束缚法
America/Anchorage.dst
的DstTzInfo
美国/安克雷奇lmt-1日,标准时间14:00:006kkfgxo02#
myzjeezk3#
请尝试以下代码,以便将java中的google时区api与当前ntp时间客户端一起使用,并从时间戳转换中更正utc\u datetime\u:
并将其用于:
5hcedyr04#
node.js的这个解决方案怎么样https://github.com/mattbornski/tzwhere
以及它的python对应物:https://github.com/pegler/pytzwhere
voase2hg5#
时区位置web服务
谷歌Map时区api
bingMap时区api
azureMap时区api
地理名称时区api
时区数据库api
askgeo-商业(但可以说比地理名称更准确)
geogarage时区api-商业,专注于航海时区。
原始时区边界数据
时区边界生成器-从openstreetmapsMap数据构建时区形状文件。包括海岸线附近的领海。
以下项目以前是时区边界数据的来源,但现在不再积极维护。
tz_world-来自eric muller的原始形状文件数据
whereonearth timezone-合并了woedb数据的geojson版本
时区地理定位离线实现
使用时区边界生成器数据的实现
node geo tz-javascript库(仅限于node.js)
时间空间-javascript库
tz查找oss-javascript库
地理时区-.net库
地理时区-php库
timezonefinder-python库
zonedetect-c库
timeshape-java库
时区Map-java和android库
lutz-r库
去图书馆
时区查找-go库
docker时区查找-docker容器 Package 节点
使用较旧的tz\U世界数据的实现
latlong-go图书馆(请阅读本文)
timezonemapper-java库
tzwhere-javascript/节点库
pytzwhere-python库
时区查找器-ruby库
latlongtotimezone-java和swift库
现在几点了描述php和mongodb的博客文章
rundel/时区-r库
调用其中一个web服务的库
时区-Ruby称为地理名称
askgeo有自己的库,可以从java或.net调用
geonames拥有几乎所有的客户端库
自托管web服务
geo2tz-基于时区查找,可通过docker image获得
其他想法
用r树找到最近的城市
用mysql查找最近的城市
如果您知道其他人,请更新此列表
另外,请注意,最近的城市方法可能不会产生“正确”的结果,只是一个近似值。
转换到windows区域
列出的大多数方法都将返回iana时区id
TimeZoneInfo
类,使用timezoneconverter库。不使用zone.tab
tz数据库包含一个名为
zone.tab
. 此文件主要用于显示时区列表,供用户选择。它包括每个时区的参考点的纬度和经度坐标。这允许创建一个突出显示这些点的Map。例如,查看时刻时区主页上显示的交互式Map。虽然使用这些数据从经纬度坐标中解析时区很有诱惑力,但请考虑这些是点,而不是边界。最好的办法是确定最近的点,在许多情况下,这不是正确的点。
考虑以下示例:
这两个方块代表不同的时区,其中每个方块中的黑点是参考位置,如zone.tab中的内容。蓝点表示我们正试图为其寻找时区的位置。很明显,这个位置在左边的橙色区域内,但是如果我们只看离参考点最近的距离,它将解析为右边的绿色区域。
qco9c6ql6#
对于那些使用javascript并希望通过googleapi从邮政编码中获取时区的人,这里有一个方法。
通过地理定位获取lat/lng
通过将其传递到timezoneapi来获取时区。
在这里使用luxon进行时区转换。
注意:我的理解是zipcodes在不同的国家不是唯一的,所以它可能最适合在美国使用。
67up9zun7#
通过使用经纬度获取当前位置的时区下面的代码为我工作
wmtdaxz38#
https://en.wikipedia.org/wiki/great-circle_distance
下面是一个很好的使用json数据的实现:https://github.com/agap/llttz
ql3eal8s9#
您可以使用geologitor.js轻松获取时区和更多。。。
它使用需要密钥的googleapi。因此,首先要配置地理定位器:
如果您有坐标,请获取时区:
输出示例:
定位然后获取时区等等
如果没有坐标,可以先定位用户位置。
下面的例子将首先尝试html5地理定位api来获取坐标。如果失败或被拒绝,它将通过geo-ip查找获得坐标。最后,它将获得时区和更多。。。
输出示例:
sauutmhj10#
如果您不想使用web服务,可以从浏览器中检索该信息,如下所示:
在我目前的情况下,它正在打印:
完整日期:27/01/2014 16:53:37 utc偏移:utc-3国家代码时区:brt
希望能有所帮助。
1wnzp6jl11#
好的,这是没有正确ntp时间的简短版本:
并将其用于:
mwecs4sa12#
在线上有几个来源有时区的geojson数据(这里有一个,这里有另一个)
使用几何体库从geojson坐标(shapely[python]、geos[c++]、jts[java]、nts[.net])创建多边形对象。
将lat/lng转换为点对象(不管库如何表示),并检查它是否与时区多边形相交。
mspsb9vt13#
披露:我是下面描述的docker图片的作者
我已经包好了https://github.com/evansiroky/node-geo-tz 在一个非常简单的docker容器中
https://hub.docker.com/repository/docker/tobias74/timezone-lookup
您可以用
这将在端口3000上的本地主机上公开查找服务。然后,您可以通过
vx6bjr1n14#
如果您想使用geonames.org,请使用以下代码(但geonames.org有时非常慢)
并将其用于:
ds97pgxw15#
认识到这是一个比大多数人想象的更复杂的问题,这一点确实很重要。在实践中,我们中的许多人也愿意接受一套适用于“尽可能多的情况”的工作代码,在这种情况下,至少它的致命问题可以被集体识别并最小化。所以我把这些和行动的精神放在一起。最后,对于那些试图将gps转换为时区,最终目标是拥有一个位置敏感的时间对象(更重要的是,为了帮助提高wiki中时间对象的平均实现质量)的人来说,这是我用python生成的内容(请随意编辑):