【发布时间】:2018-12-07 16:31:04
【问题描述】:
我在使用 Azure Maps 为时区提供的数据尝试使用 AT TIME ZONE 在 SQL Server (Azure SQL) 中获取本地时间时遇到了问题。
当我向 Azure Maps 提供夏威夷位置的纬度/经度数据时,返回显示“夏威夷-阿留申标准时间”:
"Names":{
"ISO6391LanguageCode":"en",
"Generic":"Hawaii-Aleutian Time",
"Standard":"Hawaii-Aleutian Standard Time",
"Daylight":"Hawaii-Aleutian Daylight Time"
},
在我系统的另一部分,我需要能够在 SQL Server 中确定该位置的本地时间,因此我使用AT TIME ZONE 并注入标准时区。这适用于我正在处理的美国时区,例如“东部标准时间”或“中部标准时间”。当它到达夏威夷位置时......它会出错并说它不是有效的时区。
查看我已经能够在线找到的 SQL Server 时区列表,夏威夷的 SQL 时区似乎是“夏威夷标准时间”。
还有其他人遇到过这种断开连接吗?
我想我需要纠正一些异常代码来用“夏威夷标准时间”替换这个 Azure 提供的时区。有没有更好的解决方案?
这里有一个示例 URL(减号)作为参考:https://atlas.microsoft.com/timezone/byCoordinates/json?subscription-key={key}&api-version=1.0&options=all&query=21.4500,-158.0054
这是返回的完整 JSON:
{
"Version": "2018g",
"ReferenceUtcTimestamp": "2018-12-08T17:10:31.8007137Z",
"TimeZones": [
{
"Id": "Pacific/Honolulu",
"Aliases": [
"Pacific/Johnston",
"US/Hawaii"
],
"Countries": [
{
"Name": "United States",
"Code": "US"
},
{
"Name": "US minor outlying islands",
"Code": "UM"
}
],
"Names": {
"ISO6391LanguageCode": "en",
"Generic": "Hawaii-Aleutian Time",
"Standard": "Hawaii-Aleutian Standard Time",
"Daylight": "Hawaii-Aleutian Daylight Time"
},
"ReferenceTime": {
"Tag": "HST",
"StandardOffset": "-10:00:00",
"DaylightSavings": "00:00:00",
"WallTime": "2018-12-08T07:10:31.8007137-10:00",
"PosixTzValidYear": 2018,
"PosixTz": "HST+10"
},
"RepresentativePoint": {
"Latitude": 21.306944444444444,
"Longitude": -157.85833333333332
},
"TimeTransitions": [
{
"Tag": "HST",
"StandardOffset": "-10:00:00",
"DaylightSavings": "00:00:00",
"UtcStart": "1947-06-08T12:30:00Z",
"UtcEnd": "9999-12-31T23:59:59.9999999Z"
}
]
}
]
}
【问题讨论】:
-
不是我看到的。运行
select * from sys.time_zone_info where name like '%Hawaii%';会显示您通过其他方法找到的“夏威夷标准时间”。如果 MS 产品能互相同意就好了。 -
常用的时区码有两组。 Azure Maps 平台提供 IANA 和 Windows 时区代码。 SQL 仅支持 Windows 时区代码。您能否提供您正在使用的 URL 查询,因为我不确定如何重现您看到的结果(当然排除您的密钥)。
-
据我所知,它只返回一个集合,并且与 SQL 的集合不对应。我使用示例 URL 和返回的 JSON 更新了问题。
标签: sql-server azure timezone azure-maps