![]() |
ERDDAP
更轻松地获取科学数据 |
登录 | ![]() 提供方: NOAA NMFS SWFSC ERD |
为了避免时区和夏令时混淆, ERDDAP中的时间值始终使用Zulu (UTC、GMT) 时区,用“Z”表示。以下转换器接受其他时区的字符串时间。
或者,绕过此网页并从计算机程序、脚本或网页内部进行转换。
"since"是必需的。
另一个例子是"hours since 0001-01-01" 。
时间字符串可以采用任何格式。日期部分是必需的。时间部分是可选的ERDDAP将尽力读取您提供的格式。建议的格式是 ISO 8601:2004 "extended"格式yyyy-MM-dd THH:mm:ss.SSSZ,其中 Z 是“Z”或与Zulu Zulu GMT 时区。另外,如果省略 .SSS、:ss.SSS、:mm:ss.SSS 或 Thh:mm:ss.SSS,则缺失的字段将假定为 0。
从技术上讲, ERDDAP在将"years since"和"months since" UDUNITS值转换为"seconds since"时不遵循UDUNITS标准。UDUNITS 标准将年份定义为一个固定的单一值:3.15569259747e7 秒。而UDUNITS将月份定义为年/12。不幸的是,我们看到的大多数/所有使用"years since"或"months since"的数据集都明确表示这些值是日历年或日历月。例如,3 "months since 1970-01-01"通常表示 1970-04-01。因此, ERDDAP将"years since"和"months since"解释为日历年和月,并不严格遵循UDUNITS标准。
在进行计算时, ERDDAP通常精确到毫秒,以避免出现比预期略多或略少的浮点数问题。
当用数字表示时间时, ERDDAP始终保留数字的完整精度。
默认情况下,当将时间表示为字符串时, ERDDAP会将时间格式化为(截断的)秒(即省略毫秒)。但是, ERDDAP管理员可以配置特定数据集中的特定变量,以其他精度表示字符串时间(例如,从毫秒精度到月精度;请参阅<time_precision>变量属性)。当未显示时间字段(例如毫秒或秒)时,缺失的值假定为 0(除日期外,假定为 1)。
读取带有十进制秒的 ISO 8601 时间时, ERDDAP接受句点分隔符(例如,2011-04-26T14:07:12.059Z)或逗号分隔符(例如,2011-04-26T14:07:12,059Z)。目前,在写入 ISO 8601 时间时ERDDAP始终使用句点分隔符。
目前, ERDDAP不支持任何其他日历(包括CF 元数据约定定义的 noleap、365_day、360_day 和儒略历)。但是,您可以将此类数据存储在ERDDAP中,方法是将数字或字符串存储在名为"time"以外的变量中,并且单位元数据中不包含"since" 。这样, ERDDAP就不会将这些值解释为时间,也不会将数据转换为"seconds since 1970-01-01T00:00:00Z" 。用户将能够以原始形式访问数据。
海洋数据网项目将时间存储为“自 -4713-01-01T00:00:00Z 以来的天数”,这是对公元前 4713 年 1 月 1 日午夜的引用,这是Chronological Julian Dates (CJD)的开始时间
。因此,在ERDDAP中 SeaDataNet 数据集的datasets.xml设置中,在所有时间变量的<addAttributes>部分中,您需要添加
<att name="units">days since -4712-01-01T00:00:00Z</att>
因此公元前 4713 年表示为天文年数 -4712。为了进行检查,请注意儒略历日数 2,452,952(或2452952 "days since -4712-01-01" )的开始是 2003-11-08T00:00:00Z。
或者,为了更准确地表示时间跨度,您可以设置一个数据集,使其同时具有beginTime和endTime变量(如果您想涵盖所有可能性,甚至可以centeredTime )。
百分比编码 - URL 中的参数值( '='符号后面的部分)必须进行正确的百分比编码 :除 A-Za-z0-9_-!.~'()* 之外的所有字符都必须编码为 %HH,其中 HH 是字符的 2 位十六进制值,例如空格变为 %20。#127 以上的字符必须转换为 UTF-8 字节,然后每个 UTF-8 字节都必须进行百分号编码(请程序员帮忙)。有些网站可以为您进行百分号编码和解码
。