Help:数据类型 日期型

From semantic-mediawiki.org
Jump to: navigation, search
Date(日期型)
用于保存特定的时间点(points in time,时刻)
进一步的信息
提供方: Semantic MediaWiki
最低版本: 1.4.0
目录
数据类型Date(日期型)适用于那些表示时间点(points in time,时刻)的数据取值。该类型还可以采用统一的格式来支持整个人类历史进程当中的日期,并且为支持更多的语言还提供有国际化选项。所有的日期和时间均指的是当前服务器(当前维基站点)的"本地时间(local time)"。维基站点可以依据通用惯例来界定自己所指的是什么时区(timezone)。对于导出来说,提供的将是不带时区信息的时间。不过,支持相对于本地时间的时间偏移量(time offsets)。

输入示例

如下是关于采用英语时典型日期输入的示例:

  • Feb 11 2000 10:00:01(带有时间的完整日期)
  • Feb 11 2000(仅有日期)
  • 2000(仅有年份)
  • Feb 11 2000 10:00:01 PM(带有时间及“PM”的完整日期)
  • Feb 11 2000 22:00:01(24小时制的完整日期)
  • 2000-02-11T22:00:01(ISO样式的日期)
  • 2000-02-11T22:00:01+02:00(带有偏移量的ISO样式日期)
  • 2000 February 2(支持可变的输入顺序)
  • 2-3-2000 (究竟是月还是日,首选解释有时取决于语言设置)
  • 2/3/2000(可以识别所有语言当中的各种分隔符)
  • Jan 1 300 BC(支持公元前日期)
  • 14000000000 BC(宇宙年龄的估计值)
  • Feb 11 2000 Jl(儒略历日期)
  • Feb 11 1492 Gr(视为公历来处理的日期)
  • Feb 11 2000 10:00 GMT(带有时区简称的日期)
  • 2000-02-22(MySQL日期格式)
  • 1999-00-00
    The date "1999-00-00" was not understood.
    (MySQL不完整日期格式)

测试:

  • Sun Jun 20 23:21:05 1993

其他语言亦可支持作为月份名称的附加字符串,而且,对于存在歧义的日期,亦可选择不同的首选解释。不过,基本格式则是相同的。

显示格式

利用用户首选项当中的语言设置,无法更改日期显示所采用的简单格式。 所显示日期当中的月份名称仅仅是依据维基站点当前语言来翻译的(如果有现成可用的翻译名称的话)。 日期的显示并不考虑用户设置。 从1.7.0版的Semantic MediaWiki起,亦可在打印输出请求之后使用"#MEDIAWIKI",从而让日期时间的格式编排采用MediaWiki的i18n(国际化)方法。 这种方法拥有优秀的i18n支持,但却无法处理所有的可能取值,因为MediaWiki的格式编排仅仅涵盖非常有限的日期范围,通常在1901-12-14与2038-01-19之间。 请注意,这种格式与采用$wgLanguageCode的LocalSettings.php当中的维基站点语言设置是捆绑在一起的。

如果您希望在查询(嵌入式查询概念)的打印输出请求当中保持这种简单的格式, 可在此类打印输出请求后面使用"#ISO"。 这样,所获得的就会是"2008-01-09"(利用打印输出请求?birthday#ISO获得),而不是显示"Jan 9 2008"(利用打印输出请求?birthday获得)。这是一种普通格式,用来表示ISO格式编排式样的国际日期字符串。

显示会考虑到是否忽略了日期的组成部分。因此,指定为"2008"的日期,在任何地方也都将打印输出为"2008",即使是当与其他日期相比的时候,它有可能会被解释成"Jan 1 2008 00:00:00"。

不完整日期的处理

此类型的实现会注意到是否略去了日期/时间的组成部分并加以存储(比如在"2008"或"May 2007"当中)。 对于所有的导出和排序目的,将采用默认值对不完整的日期加以补全(通常是采用最早的可能时间,比如,将"2008"解释为"Jan 1 2008 00:00:00")。 不过,为了行为的改进,比如,对于输出(在查询某个取值的时候并不打印输出默认值),还是会在内部保存关于究竟对什么未加说明的信息。

在日期当中,只能略去次要的那些组成部分:"May 2008"就可以,而"May 1"就不行。 之所以如此是因为,在日期排序的时候,无法给予后者一个合理的默认解释。 为了支持排序和查询,所有的日期都必须分别可以解释成某个具体而精确的时间点,而这在需要的时候将在内部完成,即使是对于不完整的日期。

日历模型

当前,日期型支持两种日历模型:公历(Gregorian calendar,格里历,阳历,西历)和儒略历(Julian calendar)。 1582年,天主教会提出了儒略历改革。因此,1582年2月24日之前的日期默认情况下均应当指的是儒略历。 相应地,此次改革之后的日期则被视为公历。 然而,我们可以采取手工方式,通过采用Jl或Gr(亦可理解西洋旧历<Old Style,OS>)来标注所输入的日期,来指定该日期的日历模型。 在内部,日期型采用的是proleptic Gregorian calendar(早发式格里历)(这是一个可将公历拓展到过去的扩展)来表示日期。

最大日期范围

日期型可以处理整个历史过程中的日期,并且可以全面的精确度用于存储,以及采用相当大的精确度用于排序和查询。 所支持既往日期的范围应当涵盖如今大多数理论所说的时间起点(Beginning of Time)。 所支持未来日期的范围则受到比较严格的限制,但其同时也允许采用10^9数量级的年份数。

公元前年份、负值年份以及零年

公元前年份(Years before common era,BC)可通过在日期之中使用"BC"来表示。 假设不存在"零年(year 0)":年份的历史顺序为……、2 BC、1 BC、1 AD、2AD、…… 如果把"零年(year 0)"作为输入来提供的话,无论其带不带BC,均将被解释为1 BC。然而,并不鼓励这种用法。

SMW之中所采用的内部数字型日期模型(internal numeric date model)支持"零年(year 0)",并将其视为等同于"1 BC"。 依据这项约定,比如,年份"-100"就等同于"101 BC"(其中,后者采用的是不允许使用"零年"的另一种约定;但是,后者明确赞成ISO约定,并宣称将来会在XML当中使用这种约定)。 请注意:本实现当前并不支持将负值年份指定为输入;负数仅在内部使用。

时间偏移量与时区

当前支持时间偏移量(比如,"1 1 2008 12:00-2:00")。如上所述,此类时间指的是本地时间。 时间偏移量将会考虑到闰年,比如,日期"Feb 28 2004 23:00+2:00"等同于"29 February 2004 01:00:00",而"Feb 28 1900 23:00+2:00"则等同于"1 March 1900 01:00:00"。此外,可以采用常用的时区简称(如ADT、AST、CET、CST、CXT、EST、HAC、HAT、HNR、MEZ、MST、NFT)来指定时间偏移量,如"1 March 1998 08:00:00 EST"。

表格输出当中的日期排序

MediaWiki的可排序表格(sortable table)代码无法处理日期。 要让它们正确进行排序,需要在td元素当中利用特征属性"data-sort-value"(数据排序取值)来提供数字型排序键(numeric sortkeys)(有关示例,请参见任何实际SMW表格的HTML源代码)。为了让其能够正确排序,向该数据类型当中添加了新的参数"#SORTKEY";借助于该参数,则可以获得"data-sort-value"所需的一个数字型排序键。例如,下列查询将显示出若干的日期及其排序键:

{{#ask: [[Modification date::+]]
| ?Modification date
| ?Modification date#SORTKEY
}}

对于那些可以拥有多个取值的属性,必须仅仅使用一个排序键(因为整个表格行是作为一个整体来排序,即使是一个单元格当中存在多个日期)。 如下例所示,可以利用参数"+limit"来实现这种情况下的排序:

{{#ask: [[testdate::+]]
| ?testdate
| ?testdate#SORTKEY |+limit=1
}}

尚需进一步磋商的事项

  • MediaWiki的自定义日期格式编排仅可用于那些通常位于1901-12-14与2038-01-19之间的日期。
  • 国际化尚不完整:对于所有的语言,"BC"、"AD"、"PM"、"AM"均是固定不变的。
  • 目前尚不支持(历史)日历模型之间的转换。



本文档页面适用于SMW从1.7.1版到最新版本的所有版本。
      其他语言: deen

Help:Type Date zh-hans 1.7.1