- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我刚刚在使用 Azure Maps 为时区提供的数据尝试使用 AT TIME ZONE
获取 SQL Server (Azure SQL) 中的本地时间时遇到了问题。
当我向 Azure map 提供夏威夷位置的纬度/经度数据时,返回结果显示“夏威夷-阿留申标准时间”:
"Names":{
"ISO6391LanguageCode":"en",
"Generic":"Hawaii-Aleutian Time",
"Standard":"Hawaii-Aleutian Standard Time",
"Daylight":"Hawaii-Aleutian Daylight Time"
},
在系统的另一部分,我需要能够确定 SQL Server 中该位置的本地时间,因此我使用 AT TIME ZONE
并注入(inject)标准时区。这对于我正在处理的美国时区(例如“东部标准时间”或“中部标准时间”)非常有用。当它到达夏威夷位置时......它会出错并说它不是有效的时区。
查看我能够在线找到的 SQL Server 时区列表,发现 SQL 中的夏威夷时区是“夏威夷标准时间”。
还有其他人遇到过这种脱节吗?
我想我需要纠正一些异常代码,以将 Azure 提供的时区替换为“夏威夷标准时间”。有更好的解决办法吗?
以下是示例 URL(减号键)供引用:https://atlas.microsoft.com/timezone/byCooperatives/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"
}
]
}
]
}
最佳答案
Names
部分中返回的字符串不是标识符。它们是源自 Unicode CLDR 的本地化字符串。 ,并且旨在向最终用户显示。虽然其中一些在以英语呈现时可能与标识符对齐,但不能保证这一点。
它们也不是任意选择的。根据 15 USC 260 ( and described on Wikipedia here ) 的定义,“夏威夷-阿留申时间”确实是该时区的法定名称。
另一方面,SQL Server 的时区功能严格依赖于 Windows 时区标识符,可以在 Windows 注册表中或通过各种 API(例如 .NET 的 TimeZoneInfo.Id
)找到该标识符。和命令行实用程序(例如在 TZUTIL/L
返回的每对结果的第一行)。
不幸的是,Azure Maps API 目前似乎只返回 IANA ID,而不是相应的 Windows ID。我已要求 Azure Maps API 团队考虑在未来版本中添加此功能。
同时,您可以将 IANA ID 转换为相应的 Windows ID,然后再在 SQL Server 中使用。假设您在 .NET 应用程序中,最简单的方法是使用我的 TimeZoneConverter图书馆:
string tz = TZConvert.IanaToWindows("Pacific/Honolulu"); //=> "Hawaiian Standard Time"
如果您不在 .NET 中,则可以使用 Windows 中内置的文件,路径为:
C:\Windows\Globalization\Time Zone\timezoneMapping.xml
该文件的条目如下所示:
<MapTZ TZID="Pacific/Honolulu" WinID="Hawaiian Standard Time" Region="001" Default="true" StdPath="Hawaii_Aleutian/standard" DltPath="Hawaii_Aleutian/daylight" />
您只需使用 TZID
和 WinID
属性即可进行该方向的映射。
或者,您可以使用 CLDR 的 /common/supplemental/windowsZones.xml
文件,因为这是权威来源。开发主干版本位于here 。它的数据看起来很相似,但属性的命名不同:
<mapZone other="Hawaiian Standard Time" territory="001" type="Pacific/Honolulu"/>
关于sql-server - Azure Maps 和 SQL AT TIME ZONE 夏威夷时区不兼容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53673464/
在类中实现 NSCopying 的此方法以启用复制时,区域参数使用什么?如果我设置一个新对象,我不需要用 allocWithZone 来分配它,因为 alloc 就足够了......我很困惑.....
本文整理了Java中io.sphere.sdk.zones.Zone.getLocations()方法的一些代码示例,展示了Zone.getLocations()的具体用法。这些代码示例主要来源于Gi
本文整理了Java中io.sphere.sdk.zones.Zone.getId()方法的一些代码示例,展示了Zone.getId()的具体用法。这些代码示例主要来源于Github/Stackover
本文整理了Java中io.sphere.sdk.zones.Zone.referenceTypeId()方法的一些代码示例,展示了Zone.referenceTypeId()的具体用法。这些代码示例主
本文整理了Java中io.kaif.model.zone.Zone.valueOf()方法的一些代码示例,展示了Zone.valueOf()的具体用法。这些代码示例主要来源于Github/Stacko
本文整理了Java中io.kaif.model.zone.Zone.tryFallback()方法的一些代码示例,展示了Zone.tryFallback()的具体用法。这些代码示例主要来源于Githu
我的数据库中恰好有包含 timestamp without time zone 列的表。现在我需要根据时区比较它们。 我可以这样做: select my_timestamp::timestamp wi
我正在尝试 Angular 2。但是在将 zone.js 作为全局变量导入后出现此错误: 我的包及其版本: "dependencies": { "angular2": "2.0.0-beta.
可能我问这个问题已经太晚了,但无论如何。 有人可以解释一下在什么情况下我需要导入区域的补丁 - zone.js/dist/zone-patch-rxjs。据我所知,补丁已添加到此 PR 中(this
问题很简短:如果我已经在没有时区的时间戳类型的列中有数据,如果我将类型设置为带时区的时间戳,postgresql 将如何处理这些数据? 最佳答案 它将当前值保留在本地时间并将时区设置为本地时间的偏移量
我有一个在东部时区的时间,但我想将它调整为中部时区。两个时区都在美国。我从来没有这样做过?我不知道如何转换它。请帮帮我好吗? 最佳答案 这是一种可能的方法: $dt = new DateTime('2
我在 Angular 11 上有一个应用程序刚刚开始在所有浏览器、所有环境(本地/暂存/生产)上同时出现错误(大约一个小时前,没有任何更新或任何东西): Uncaught TypeError: t.g
我们有一个函数,可以像 JS 一样解析 UTC 中的日期/时间对,但随后强制它的行为就像在本地时区中指定的一样。如下: var tz = (new Date()).toString().match(/
我很难理解 "AT TIME ZONE 'localtime'" 究竟是如何工作的?通过使用它,我发现它的行为与 "AT TIME ZONE 'UTC'" 完全一样......但是为什么呢? "loc
我在 PostgreSQL 9.3 ALTER TABLE manual page 中找到了这个 ALTER COLUMN 语句: ALTER TABLE audits ALTER COLUM
首先,我意识到不推荐使用 time with time zone。我要使用它是因为我将多个 time with time zone 值与我当前的系统时间进行比较,而不管是哪一天。 IE。用户说每天 0
在 Rails 控制台中: > ActiveSupport::TimeZone['Samoa'].utc_offset => -39600 > ActiveSupport::TimeZone['Sam
我在两个不同的数据库中运行了相同的语句:我的本地数据库和 Oracle Live SQL . CREATE TABLE test( timestamp TIMESTAMP DEFAULT SY
我在两个不同的数据库中运行了相同的语句:我的本地数据库和 Oracle Live SQL . CREATE TABLE test( timestamp TIMESTAMP DEFAULT SY
在 Rails 3.0.10 中,我使用 Time.zone 来更改用户查看美国各地发布的类(class)时间的方式。然而,更改时区似乎并不像我期望的那样 Time.zone = TZInfo::Ti
我是一名优秀的程序员,十分优秀!