日期时间和数字格式可用于控制数据在工作表中的显示方式。 Google 表格提供了一些常见格式供您选择,但您也可以自行定义格式。
在 Google 表格界面中,您可以使用格式 > 数字菜单将数字和日期格式应用于单元格。在 Sheets API 中,您可以使用 spreadsheets.batchUpdate 方法调用来发送 UpdateCellsRequest 或 RepeatCellRequest,从而设置这些格式。
本页介绍了如何定义新的日期和数字格式模式,您可以将这些模式纳入 API 请求中。示例为范围设置自定义日期时间或小数格式展示了如何使用 API 设置格式模式。请注意,格式的实际呈现效果取决于电子表格的 locale。本指南假定 locale 为 en_US。您可以通过使用 spreadsheets.get 请求读取 SpreadsheetProperties 来确定电子表格的 locale。
日期和时间值简介
与大多数其他电子表格应用一样,Google 表格会将日期和时间值视为十进制值。这样,您就可以在公式中对它们执行算术运算,例如增加天数或周数、加减两个日期和时间,以及执行其他类似的操作。
Google 表格使用电子表格中常用的纪元日期形式。该值的整数部分(小数点左侧)表示自 1899 年 12 月 30 日以来的天数。小数部分(小数点右侧)将时间计为一天的分数。例如,1900 年 1 月 1 日中午是 2.5,因为它是 1899 年 12 月 30 日之后的第 2 天,而中午是半天,因此是 0.5。21900 年 2 月 1 日下午 3 点是 33.625。
Google 表格正确地将 1900 年视为平年,而非闰年。
日期和时间格式模式
日期时间格式模式是一个令牌子字符串,在解析时会被替换为相应的日期时间元素(例如月份或小时)。
日期和时间格式令牌
下表定义了您可以在日期时间格式模式中使用的令牌子字符串。+ 字符表示前一个字符可以出现一次或多次,并且仍与相应模式匹配。下表中未列出的字符会被视为字面值,并按原样输出。
| 令牌 | 说明 | 
|---|---|
| h | 一天中的时段。根据字符串中是否存在“上午”或“下午”指示器,在 12 小时制和 24 小时制之间切换。 | 
| hh+ | 与上一个相同,但对于 1-9,前面会添加 0。 | 
| m | 如果前一个非字面令牌是小时,或者后一个非字面令牌是秒,则表示小时中的分钟(不含前导 0)。否则,它表示一年中的月份(不带前导 0)。 | 
| M | 月份,不含前导 0。使用此令牌可在模式中明确指定月份,而不是分钟。 | 
| mm | 与 m相同,但两种情况都以 0 开头。 | 
| MM | 一年中的月份,含前导 0。使用此令牌可在模式中明确指定月份,而不是分钟。 | 
| mmm | 三个字母的月份缩写(例如“Feb”)。 | 
| mmmm | 月份的全名。 mmmmmm+也符合此条件。 | 
| mmmmm | 月份的首字母(例如,6 月为“J”)。 | 
| s | 一分钟中的秒数,不含前导 0。 | 
| ss | 一分钟中的秒数,含前导 0。 | 
| [h+] | 时间段内经过的小时数。字母数 表示最小位数(添加前导 0)。 | 
| [m+] | 时间段内经过的分钟数。字母数 表示最小位数(添加前导 0)。 | 
| [s+] | 时间段内经过的秒数。字母数 表示最小位数(添加前导 0)。 | 
| d | 月份中的某天,对于小于 10 的数字不含前导 0。 | 
| dd | 月份中的某天,如果数字小于 10,则带有前导 0。 | 
| ddd | 星期几,三个字母的缩写(例如“Mon”)。 | 
| dddd+ | 星期几(全名)。 | 
| y | 2 位数年份。 | 
| yy | |
| yyy | 年(4 位数)。 | 
| yyyy+ | |
| a/p | 对于上午,显示“a”;对于下午,显示“p”。还会将小时数更改为 12 小时制。如果令牌字母是大写,输出也是大写。 | 
| am/pm | 与上一个格式类似,但显示“AM”或“PM”,且始终采用大写形式。 | 
| 0 | 十分之一秒。您可以使用 00将精度提高到两位数,或使用000将精度提高到三位数(毫秒)。 | 
| \ | 将下一个字符视为字面值,而不是它可能具有的任何特殊含义。 | 
| "text" | 将引号内的任何文本显示为字面值。 | 
日期和时间格式示例
假设日期和时间为 Tuesday, April 5, 2016, 4:08:53.528 PM,下表显示了一些示例格式及其对应的日期时间呈现方式。该表的第二部分显示了时长为 3 hours, 13 minutes, 41.255 seconds 的时长格式示例:
| 日期时间格式 | Tuesday, April 5, 2016, 4:08:53.528 PM | 
|---|---|
| h:mm:ss.00 a/p | 4:08:53.53 p | 
| hh:mm A/P".M." | 下午 4:08 | 
| yyyy-mm-dd | 2016-04-05 | 
| mmmm d \[dddd\] | 4 月 5 日 [星期二] | 
| h PM, ddd mmm dd | 4 月 5 日(周二)下午 4 点 | 
| dddd, m/d/yy at h:mm | 2016 年 4 月 5 日(周二)16:08 | 
| 已用时间格式 | 3 hours, 13 minutes, 41.255 seconds | 
| [hh]:[mm]:[ss].000 | 03:13:41.255 | 
| [mmmm]:[ss].000 | 0193:41.255 | 
数字格式模式
数字格式模式是一个令牌子字符串,在解析时会被替换为相应的数字表示形式。数字格式模式最多可包含四个部分(用分号分隔),分别用于定义正数、负数、零和文本的格式(按此顺序):
[POSITIVE FORMAT];[NEGATIVE FORMAT];[ZERO FORMAT];[TEXT FORMAT]
您无需在格式中包含所有四个部分。如果您只添加一个部分,则所有值都使用该格式。使用两个部分会导致第一个格式应用于零和正数,第二个格式应用于负数。使用三个部分可为正数、负数和零分别定义不同的格式。例如:
[NUMBER FORMAT] [POSITIVE/ZERO FORMAT];[NEGATIVE FORMAT] [POSITIVE FORMAT];[NEGATIVE FORMAT];[ZERO FORMAT]
不过,如果有两个或更多部分,并且最后一部分是文本格式,则该部分会被视为文本格式,而其他部分的行为则与少了一个部分时一样。因此,通过包含最终文本格式,可以定义以下格式:
[POSITIVE/ZERO FORMAT];[NEGATIVE FORMAT];[TEXT FORMAT] [NUMBER FORMAT];[TEXT FORMAT]
将格式解析为各个部分的过程发生在其他解析之前,因此可以将日期或时间格式作为其中一个部分包含在内(尽管这种做法的实用性有限)。
数字格式令牌
下表定义了您可以在格式部分中使用的令牌子字符串,以定义如何表示相应部分的值。
| 令牌 | 说明 | 
|---|---|
| 0 | 表示数字中的一位。如果数字是无关紧要的 0,则呈现为 0。例如,数字格式 00.0会将数字 3 呈现为“03.0”。 | 
| # | 表示数字中的一位。如果数字是不重要的 0,则不会呈现。例如,数字格式 ##0会将数字 12 呈现为“12”。 | 
| ? | 表示数字中的一位。如果数字是无关紧要的 0,则会呈现为空格。使用等宽字体时,此属性通常用于对齐列中的小数点。例如,数字格式 ???.???会将数字 12.4 呈现为:“12.4”。 | 
| . | 第一个句点表示数字中的小数点。后续句点呈现为字面量。如果您在格式中添加了小数点,系统始终会呈现该小数点,即使对于整数也是如此。例如, #0.#会将数字 3 呈现为“3.”。 | 
| % | 显示为字面值,但也会导致现有数字在呈现之前乘以 100,以使百分比更易于理解。例如,数字格式 #%会将数字 0.25 呈现为“25%”。 | 
| , | 如果它出现在两位数字符( 0、#或?)之间,则会使用分组分隔符(按千位分组)呈现整个数字。如果它跟在数字字符后面,则每出现一个逗号,数字就会按千为单位进行缩放(例如,格式#0.0,,会将数字 12,200,000 呈现为12.2)。 | 
| E- | 以科学计数法格式呈现数字, E左侧的格式设置用于非指数部分,E 右侧的格式设置用于指数部分。E+会为正指数显示+符号。E-仅显示负指数的符号。如果使用小写字母,输出e也将采用小写形式。
    例如,数字格式##0.00#E+##会将数字 0.0000001 呈现为“100.00E-9”。 | 
| E+ | |
| e- | |
| e+ | |
| / | 如果它出现在两位数字符( 0、#或?)之间,则会将这些数字组视为小数格式。例如,数字格式0 #/#会将数字 23.25 呈现为23 1/4。分母也可以是字面整数,在这种情况下,系统会强制将该整数作为分母。数字格式0 #/8会将数字 23.25 显示为23 2/8。如果分子变为 0,则不渲染分数部分。数字 23.1 采用数字格式0 #/3呈现为23(因为 0.1 四舍五入为 0/3)。/与科学记数法格式或包含小数点的格式不兼容。 | 
| * | 这是为了与 Microsoft Excel 数字格式兼容而添加的。目前会被忽略。 | 
| _ | 下划线令牌会跳过下一个字符并呈现一个空格。用于对齐负值用英文圆括号括起来的数字格式。 | 
| \ | 将下一个字符视为字面值,而不是它可能具有的任何特殊含义。例如,数字格式 \#0会将数字 10 呈现为“#10”。 | 
| "text" | 将引号内的任何文本显示为字面值。 | 
| @ | 如果单元格有文本输入,则插入该单元格的原始文本。与任何其他特殊字符都不兼容,并且不显示数值(以常规格式显示)。 | 
| $ - + ( ) : space | Google 表格会将这些字符视为字面值,并按原样显示。 | 
Meta 说明
此外,每个格式部分都可以包含可选的元指令(用 [] 字符括起来),这些指令位于格式之前,用于提供其他说明。元指令类型有两种,一个给定的部分可以同时使用这两种类型:
| 指令 | 说明 | 
|---|---|
| [condition] | 将部分的默认正数、负数或零比较替换为其他条件表达式。例如, [<100]”Low”;[>1000]”High”;000会针对低于 100 的值呈现“低”,针对高于 1000 的值呈现“高”,针对介于两者之间的任何值呈现三位数(含前导 0)。条件只能应用于前两种子格式,如果某个数字与多个条件匹配,系统会使用第一个匹配的条件。如果存在第三种格式,则用于“所有其他情况”;否则,如果某个数字与这两种格式都不匹配,则会呈现为填充单元格宽度的所有“#”。如果存在,则始终使用第四种格式来设置文本格式。 | 
| [Color] or [Color#] | 使此子格式呈现的任何值都以给定的文字颜色显示。Color 的有效值为 Black、Blue、Cyan、Green、Magenta、Red、White 或 Yellow。 Color# 中“#”的有效值为 1-56(此调色板显示了与每个数字对应的颜色列表)。数字格式颜色会替换用户在单元格中输入的任何颜色,但不会替换通过条件格式设置的颜色。 | 
数字格式示例
下表显示了一些示例格式及其对应的格式化数字呈现效果:
| 数字 | 模式 | 已设置格式的值 | 
|---|---|---|
| 12345.125 | ####.# | 12345.1 | 
| 12.34 | 000.0000 | 012.3400 | 
| 12 | #.0# | 12.0 | 
| 5.125 | # ???/??? | 5 1/8 | 
| 12000 | #,### | 12000 | 
| 1230000 | 0.0,,"M" | 120 万 | 
| 1234500000 | 0.00e+00 | 1.23e+09 | 
| 123114.15115 MyText | ###0.000;"TEXT: "_(@_) | 123114.151 TEXT: MyText | 
| 1234 -1234 0 MyText | [Blue]#,##0;[Red]#,##0;[Green]0.0;[Magenta]_(@_) | 1,234 1,234 0.0 MyText | 
| 1005 32 527 | [>1000]"HIGH";[Color43][<=200]"LOW";0000 | 高 低 0527 |