データ型

BigQuery は、整数などの単純なデータ型と ARRAY や STRUCT などの複雑なデータ型をサポートします。このページでは、許容値など各データ型の概要を説明します。データ型のリテラルおよびコンストラクタの詳細については、語彙構造と構文をご覧ください。

データ型のプロパティ

クエリデータを保存する場合、以下のデータ型のプロパティを覚えておくと役に立ちます。

プロパティ 説明 対象
Nullable NULL は有効な値です。 すべてのデータ型。ただし、ARRAY には条件が適用されます
Orderable ORDER BY 句で使用できます。 以下を除くすべてのデータ型:
  • ARRAY
  • STRUCT
  • GEOGRAPHY
Groupable 通常、
GROUP BYDISTINCTPARTITION BY に続く式で使用されます。
ただし、PARTITION BY 式に浮動小数点型
を含めることはできません。
以下を除くすべてのデータ型:
  • ARRAY
  • STRUCT
  • GEOGRAPHY
Comparable 同じ型の値をお互いに比較できます。 以下の例外を除くすべてのデータ型: ARRAY の比較はサポートされていません。

STRUCT の値の等価性比較はフィールド順にフィールドごとにサポートされています。フィールド名は無視されます。比較値よりも小さい値と大きい値はサポートされません。

GEOGRAPHY の比較はサポートされていません。GEOGRAPHY 値を比較するには、ST_Equals を使用します。

比較をサポートするすべての型が JOIN 条件で使用されます。結合条件の説明については、JOIN データ型をご覧ください。

パラメータ化されたデータ型

構文:

DATA_TYPE(param[, ...])

パラメータを使用して、次のデータ型の制約を指定できます。

  • STRING
  • BYTES
  • NUMERIC
  • BIGNUMERIC

パラメータで宣言されたデータ型は、パラメータ化されたデータ型と呼ばれます。パラメータ化されたデータ型は、列とスクリプト変数でのみ使用できます。パラメータ化されたデータ型を含む列はパラメータ化された列になり、パラメータ化されたデータ型のスクリプト変数はパラメータ化されたスクリプト変数になります。パラメータ化された型制約は、パラメータ化された列に値を書き込むとき、またはパラメータ化されたスクリプト変数に値を割り当てるときに適用されます。

データ型のパラメータは式に渡されず、データ型だけが渡されます。

-- Declare a variable with type parameters.
DECLARE x STRING(10);

-- This is a valid assignment to x.
SET x = "hello";

-- This assignment to x violates the type parameter constraint and results in an OUT_OF_RANGE error.
SET x = "this string is too long"
-- Declare variables with type parameters.
DECLARE x NUMERIC(10) DEFAULT 12345;
DECLARE y NUMERIC(5, 2) DEFAULT 123.45;

-- The variable x is treated as a NUMERIC value when read, so the result of this query
-- is a NUMERIC without type parameters.
SELECT x;

-- Type parameters are not propagated within expressions, so variables x and y are treated
-- as NUMERIC values when read and the result of this query is a NUMERIC without type parameters.
SELECT x + y;

配列型

名前 説明
ARRAY ARRAY 型ではないゼロ以上の要素の順序付きリスト。

ARRAY は、ARRAY 型ではない値のゼロ以上の要素の順序付きリストです。ARRAY 内の要素は同じ型でなければなりません。

ARRAY からなる ARRAY は許可されません。ARRAY からなる ARRAY を生成するクエリはエラーを返します。そのような場合は、SELECT AS STRUCT コンストラクトを使用して ARRAY の間に STRUCT を挿入する必要があります。

NULL と ARRAY 型

現在、BigQuery には、NULL と ARRAY に関する次のルールがあります。

  • ARRAY には NULL を指定できます。

    例:

    SELECT CAST(NULL AS ARRAY<INT64>) IS NULL AS array_is_null;
    
    +---------------+
    | array_is_null |
    +---------------+
    | TRUE          |
    +---------------+
    
  • クエリ内では NULL と空の ARRAY は 2 つの別個の値ですが、BigQuery はクエリ結果で NULL ARRAY を空の ARRAY に変換します。

    例:

    WITH Items AS (
      SELECT [] AS numbers UNION ALL
      SELECT CAST(NULL AS ARRAY<INT64>))
    SELECT numbers FROM Items;
    
    +---------+
    | numbers |
    +---------+
    | []      |
    | []      |
    +---------+
    
  • NULL 要素を含む ARRAY はクエリ内で使用できますが、そのような ARRAY がクエリ結果にあると、BigQuery でエラーが発生します。

    たとえば、次のようになります。

    SELECT FORMAT("%T", [1, NULL, 3]) as numbers;
    
    +--------------+
    | numbers      |
    +--------------+
    | [1, NULL, 3] |
    +--------------+
    

    ただし、次のエラーが発生します。

    -- error
    SELECT [1, NULL, 3] as numbers;
    

ARRAY 型の宣言

ARRAY<T>

ARRAY 型は山括弧(<> )を使用して宣言されます。ARRAY 要素のデータ型は任意のコンプレックスにすることができますが、ARRAY に直接別の ARRAY を含めることはできません。

型の宣言 意味
ARRAY<INT64> 64 ビット整数のシンプルな ARRAY。
ARRAY<BYTES(5)> パラメータ化されたバイトのシンプルな ARRAY。
ARRAY<STRUCT<INT64, INT64>> STRUCT からなる ARRAY。各 STRUCT には 64 ビット整数が 2 つ含まれます。
ARRAY<ARRAY<INT64>>
(サポート対象外)
これは無効な型の宣言です。マルチレベル ARRAY の作成方法を調べるためにこのページにアクセスした場合に備え、ここに記載しておきます。ARRAY には直接 ARRAY を含めることはできません。代わりに次の例をご覧ください。
ARRAY<STRUCT<ARRAY<INT64>>> 64 ビット整数の ARRAY からなる ARRAY。ARRAY には直接他の ARRAY を含めることができないため、2 つの ARRAY の間に STRUCT が挿入されています。

ARRAY の作成

配列リテラルまたは配列関数を使用して ARRAY を作成できます。手順については、配列の操作をご覧ください。

ブール型

名前 説明
BOOL ブール値はキーワード TRUEFALSE(大文字と小文字の区別なし)で表されます。

ブール値は、小さい値から大きい値に並べ替えられます。

  1. NULL
  2. FALSE
  3. TRUE

バイト型

名前 説明
BYTES 可変長文字バイナリデータ。

STRING と BYTES は入れ替えて使用できない別々の型です。STRING を操作する大半の関数は BYTES に対しても定義されています。BYTES バージョンは Unicode 文字ではなく RAW バイトを操作します。STRING と BYTES の間でキャスティングを行うと、強制的に UTF-8 を使用してバイトがエンコードされます。

パラメータ化されたバイト型

パラメータ化された型 説明
BYTES(L) バイナリ文字列で許容される最大 L バイトのバイト シーケンス。L は正の INT64 値です。バイト シーケンスが L バイトを超えると、OUT_OF_RANGE エラーが発生します。

パラメータ化された型の詳細と使用できる場所については、パラメータ化されたデータ型をご覧ください。

日付型

名前 範囲
DATE 0001-01-01~9999-12-31

DATE 型は、タイムゾーンに関係なく、論理カレンダー日を表します。DATE 型の値は特定の 24 時間の期間を表していません。所定の DATE 値は、解釈されるタイムゾーンによって異なる 24 時間の期間を表します。また、夏時間の移行期には 1 日が通常よりも短くなったり、長くなったりする場合があります。絶対的な時刻を表すには、タイムスタンプを使用します。

正規形式
'YYYY-[M]M-[D]D'
  • YYYY: 4 桁の年
  • [M]M: 1 桁または 2 桁の月
  • [D]D: 1 桁または 2 桁の日

日時型

名前 範囲
DATETIME 0001-01-01 00:00:00~9999-12-31 23:59:59.999999

DATETIME オブジェクトは、タイムゾーンに依存せずにカレンダーや時計に表示される日時を表します。これには年、月、日、時、分、秒、サブ秒が含まれます。絶対的な時刻を表すには、タイムスタンプを使用します。

正規形式
YYYY-[M]M-[D]D[( |T)[H]H:[M]M:[S]S[.F]]
  • YYYY: 4 桁の年
  • [M]M: 1 桁または 2 桁の月
  • [D]D: 1 桁または 2 桁の日
  • ( |T): スペースまたは区切り文字「T」
  • [H]H: 1 桁または 2 桁の時(有効な値は 00~23)
  • [M]M: 1 桁または 2 桁の分(有効な値は 00~59)
  • [S]S: 1 桁または 2 桁の秒(有効な値は 00~59)
  • [.F]: 最大で小数第 6 位まで(マイクロ秒の精度)

地理型

名前 説明
GEOGRAPHY ポイントセットまたは地球表面のサブセットとして表されるポイント、ライン、およびポリゴンのコレクション。

GEOGRAPHY 型は、OGC Simple Features 仕様(SFS)に基づいており、次のオブジェクトのコレクションです。

  • Point geography: 座標空間内の単一の場所。ポイントには x 座標値と y 座標値があり、x 座標は WGS84 基準楕円体上のポイントの経度、y 座標は緯度です。
  • Linestring geography : 一連のポイントと測地エッジが間にある 1 次元の幾何学的オブジェクト。
  • Polygon geography: 1 個の外部境界と 0 個以上の内部境界で定義される平面表面。それぞれの内部境界でポリゴンの穴が定義されます。ポリゴンの境界ループは、境界頂点を順番にトラバースするとポリゴンの内部が左側になる向きです。

GEOGRAPHY 値のポイント、LineString、ポリゴンは、WGS84 基準楕円体上の単純な配列を形成します。単純配列は、WGS84 表面上のポイントがコレクションの複数の要素に含まれない配列です。自己交差が存在している場合、自動的に削除されます。

ポイント、LineString、ポリゴンを含まない GEOGRAPHY は、空の GEOGRAPHY と呼ばれます。

GEOGRAPHY は、地理関数の結果または引数です。

間隔型

名前 範囲
INTERVAL -10000-0 -3660000 -87840000:0:0~10000-0 3660000 87840000:0:0

INTERVAL オブジェクトは期間を表します。間隔は、次の 3 つの独立した部分から構成されます。

  • [sign]Y-M: 年と月
  • [sign]D: 日
  • [sign]H:M:S.F: 時間、分、秒、サブ秒

正規形式
[sign]Y-M [sign]D [sign]H:M:S[.F]
  • Y: 年
  • M: 月
  • D: 日
  • H: 時間
  • M: 分
  • S: 秒
  • [.F]: 最大で小数第 6 位まで(マイクロ秒の精度)

数値型

数値型には次の種類があります。

  • INT64(エイリアス: INTSMALLINTINTEGERBIGINTTINYINTBYTEINT

  • NUMERIC(エイリアス: DECIMAL

  • BIGNUMERIC(エイリアス: BIGDECIMAL

  • FLOAT64

整数型

整数は小数部分を持たない数値です。

名前 範囲
INT64
INT
SMALLINT
INTEGER
BIGINT
TINYINT
BYTEINT
-9,223,372,036,854,775,808~9,223,372,036,854,775,807

INTSMALLINTINTEGERBIGINTTINYINTBYTEINTINT64 のエイリアスです。

小数型

小数型の値は、固定の小数点以下の精度とスケールを持つ数値です。精度は、数値に含まれる桁数です。スケールは小数点以下の桁数です。

この型は、小数部分を正確に表すことができ、財務計算に適しています。

名前 精度、スケール、範囲
NUMERIC
DECIMAL
精度: 38
スケール: 9
最小: -9.9999999999999999999999999999999999999E+28
最大: 9.9999999999999999999999999999999999999E+28
BIGNUMERIC
BIGDECIMAL
精度: 76.76(77 桁目は一部)
スケール: 38
最小: -5.7896044618658097711785492504343953926634992332820282019728792003956564819968E+38
最大: 5.7896044618658097711785492504343953926634992332820282019728792003956564819967E+38

DECIMALNUMERIC のエイリアスです。BIGDECIMALBIGNUMERIC のエイリアスです。

パラメータ化された小数型

パラメータ化された型 説明
NUMERIC(P[,S])
DECIMAL(P[,S])
最大精度が P、最大スケールが SNUMERIC または DECIMAL 型。PS の型は INT64 になります。指定しない場合、S は 0 と解釈されます。

最大スケール範囲: 0 ≤ S ≤ 9
最大精度範囲: max(1, S) ≤ PS + 29
BIGNUMERIC(P[, S])
BIGDECIMAL(P[, S])
最大精度が P、最大スケールが SBIGNUMERIC または BIGDECIMAL 型。PS の型は INT64 になります。指定しない場合、S は 0 と解釈されます。

最大スケール範囲: 0 ≤ S ≤ 38
最大精度範囲: max(1, S) ≤ PS + 38

値が S の小数桁を超える場合、S の小数桁に丸められます。たとえば、NUMERIC(5, 2)列に値 1.125 を挿入すると、1.125 は四捨五入され、1.13 になります。

値が P の桁を超える場合、OUT_OF_RANGE エラーが発生します。たとえば、NUMERIC(5, 2)列に 1111 を挿入すると、1111 は NUMERIC(5, 2)列の最大許容値である 999.99 より大きいため、OUT_OF_RANGE エラーが返されます。

パラメータ化された型の詳細と使用できる場所については、パラメータ化されたデータ型をご覧ください。

浮動小数点型

浮動小数点の値は小数部分のある近似値です。

名前 説明
FLOAT64 倍精度(近似)数値。

浮動小数点セマンティクス

浮動小数点を扱う場合、NaN+/-inf という考慮しなければならない特別な非数値があります。

算術演算子は、有限出力を出すすべての有限入力値と、少なくとも 1 つの入力が非定形であるすべてのオペレーションに対し、標準 IEEE-754 動作を行えるようにします。

入力が有限値であっても出力が非定形の場合、関数呼び出しと演算子によってオーバーフロー エラーが返されます。入力に非定形値が含まれる場合、出力が非定形になる可能性があります。一般的な関数では NaN または +/-inf が使用されません。しかし、IEEE_DIVIDE のような特定の関数は有限入力に対し非定形値を返すことがあります。このような場合はすべて、数学的関数で明示的に表されます。

浮動小数点値は近似値です。

  • 浮動小数点値を表すバイナリ形式では、値の範囲で最大の正の値と最小の負の数の間の数値サブセットのみを表現できます。これにより、他の方法よりもはるかに広い範囲を効率的に処理できます。正確に表現できない数値は、近似値を使用して表します。たとえば、0.12 の累乗でスケーリングされる整数として表現することはできません。この値を文字列として表す場合は、指定した桁数に丸められます。0.1 に近い値が "0.1" と表される場合があり、正確な値でないことがわからないことがあります。それ以外の場合は、近似値が表示されます。
  • 浮動小数点値を合計すると、精度に制限があるため、予期しない結果になることがあります。たとえば、(1e30 + 1e-20) - 1e30 = 0(1e30 - 1e30) + 1e-20 = 1e-20 のようになります。これは、浮動小数点値では (1e30 + 1e-20) を表すのに十分な精度がないため、結果が 1e30 に丸められるためです。この例では、浮動小数点値の SUM 集計関数の結果が、値が累積された順序によって変わることも示しています。通常、この順序は確定的ではないため、結果も確定的ではありません。したがって、浮動小数点値の結果の SUM は確定的ではなく、同じテーブルに対して同じクエリを 2 回実行すると異なる結果になることがあります。
  • 上記の点について問題がある場合は、固定小数点型を使用してください。
数学的関数の例
左の用語 演算子 右の用語 戻り値
任意値 + NaN NaN
1.0 + +inf +inf
1.0 + -inf -inf
-inf + +inf NaN
FLOAT64 の最大値 + FLOAT64 の最大値 オーバーフロー エラー
最小 FLOAT64 / 2.0 0.0
1.0 / 0.0 「ゼロ除算」エラー

比較演算子は浮動小数点入力に対し、標準 IEEE-754 動作を行えるようにします。

比較演算子の例
左の用語 演算子 右の用語 戻り値
NaN = 任意値 FALSE
NaN < 任意値 FALSE
任意値 < NaN FALSE
-0.0 = 0.0 TRUE
-0.0 < 0.0 FALSE

浮動小数点の値は小さい値から大きい値の順に並べ替えられます。

  1. NULL
  2. NaN - 並べ替えるときにすべての NaN 値は同じものとみなされます。
  3. -inf
  4. 負の数
  5. 0 または -0 - 並べ替えるときにすべてのゼロ値は同じものとみなされます。
  6. 正の数
  7. +inf

特定の浮動小数点の値は、GROUP BY 句を使ったグループ分けと DISTINCT キーワードでのグループ分けの両方を含め、次のようにグループ分けできます。

  • NULL
  • NaN - グループ分けするときにすべての NaN 値は同じものとみなされます。
  • -inf
  • 0 または -0 - グループ分けするときにすべてのゼロ値は同じものとみなされます。
  • +inf

文字列型

名前 説明
STRING 可変長文字(Unicode)データ。

入力 STRING 値は UTF-8 エンコードに変換する必要があります。また、出力 STRING 値は UTF-8 エンコードに変換されます。CESU-8 や修正 UTF-8 などの代替エンコーディングは有効な UTF-8 として扱われません。

STRING 値を操作するすべての関数と演算子は、バイトではなく Unicode 文字を処理します。たとえば、STRING 型の入力値に適用される SUBSTRLENGTH のような関数は、バイトではなく文字数をカウントします。

各 Unicode 文字には、コードポイントと呼ばれる数値が割り当てられます。下位のコードポイントは下位の文字に割り当てられます。文字が比較されるとき、コードポイントは他の文字より小さい文字か大きい文字かを判断します。

STRING を操作する大半の関数は BYTES に対しても定義されています。BYTES バージョンは Unicode 文字ではなく RAW バイトを操作します。STRING と BYTES は入れ替えて使用できない別々の型です。いずれの方向にも暗黙的にキャスティングされません。STRING と BYTES との明示的なキャスティングでは UTF-8 エンコーディングとデコーディングが行われます。バイトが有効な UTF-8 ではない場合、BYTES から STRING へのキャスティングではエラーが返されます。

パラメータ化された文字列型

パラメータ化された型 説明
STRING(L) 文字列の最大文字数は L です。ここで、L は正の INT64 値です。L を超える Unicode 文字の文字列が割り当てられると、OUT_OF_RANGE エラーが発生します。

パラメータ化された型の詳細と使用できる場所については、パラメータ化されたデータ型をご覧ください。

構造体型

名前 説明
STRUCT 順序付きフィールドのコンテナ。各フィールドはデータ型(必須)とフィールド名(オプション)を持ちます。

STRUCT 型の宣言

STRUCT<T>

STRUCT 型は山括弧(<>)を使用して宣言されます。STRUCT 要素のデータ型は任意のコンプレックスにすることができます。

型の宣言 意味
STRUCT<INT64> 単一の名前の付いていない 64 ビット整数フィールドを持つシンプルな STRUCT。
STRUCT<x STRING(10)> 単一のパラメータ化された文字列フィールドを持つ x というシンプルな STRUCT。
STRUCT<x STRUCT<y INT64, z INT64>> x という名前のネストされた STRUCT を内部に持つ STRUCT。この STRUCT x には yz という 2 つのフィールドがあり、その両方が 64 ビット整数です。
STRUCT<inner_array ARRAY<INT64>> 64 ビット整数要素を持つ inner_array という名前の ARRAY が含まれる STRUCT。

STRUCT の構成

タプル構文

(expr1, expr2 [, ... ])

出力データ型は、入力式のデータ型と一致する型の匿名フィールドのある匿名 STRUCT データ型です。少なくとも 2 つの指定された式が必要です。式がないと、構文は括弧で括られた式と区別できません。

構文 出力データ型
(x, x+y) STRUCT<?,?> 列名が使われている場合(文字列が引用されていない場合)、STRUCT フィールドのデータ型は列のデータ型から導出されます。xy は列であるため、STRUCT フィールドのデータ型は列の型と追加演算子の出力データ型から導出されます。

WHERE 句などのマルチパート キーを使った比較式では、この構文を使用して STRUCT を比較することもできます。

WHERE (Key1,Key2) IN ( (12,34), (56,78) )

型のない STRUCT 構文

STRUCT( expr1 [AS field_name] [, ... ])

重複するフィールド名は許可されます。名前のないフィールドは匿名フィールドとみなされ、名前では参照できません。STRUCT の値は NULLNULL フィールド値になります。

構文 出力データ型
STRUCT(1,2,3) STRUCT<int64,int64,int64>
STRUCT() STRUCT<>
STRUCT('abc') STRUCT<string>
STRUCT(1, t.str_col) STRUCT<int64, str_col string>
STRUCT(1 AS a, 'abc' AS b) STRUCT<a int64, b string>
STRUCT(str_col AS abc) STRUCT<abc string>

型のある STRUCT 構文

STRUCT<[field_name] field_type, ...>( expr1 [, ... ])

型のある構文で、明示的な STRUCT データ型を持つ STRUCT を構成できます。出力データ型は、指定された field_type と正確に同じものになります。2 つの型が同じではない場合、入力式は強制的に field_type となります。その 2 つの型に互換性がない場合はエラーとなります。AS alias は入力式で許可されません。式の数は型のフィールド数と一致しなければなりません。また、式のデータ型はフィールドのデータ型に従うように、強制的に変換できるか、リテラルを強制的に変換できる必要があります。

構文 出力データ型
STRUCT<int64>(5) STRUCT<int64>
STRUCT<date>("2011-05-05") STRUCT<date>
STRUCT<x int64, y string>(1, t.str_col) STRUCT<x int64, y string>
STRUCT<int64>(int_col) STRUCT<int64>
STRUCT<x int64>(5 AS x) エラー - 型のある構文では AS を使用できません。

STRUCT の制限付き比較

次の等価演算子を使用して、STRUCT 同士を直接比較できます。

  • 等号(=
  • 不等号(!= または <>
  • [NOT] IN

直接等価性比較では、フィールド名を無視して、元の順序で STRUCT のフィールドのペアを比較することにご注意ください。STRUCT 内で同じ名前のフィールドを比較する場合は、個々のフィールドを直接比較できます。

時刻型

名前 範囲
TIME 00:00:00 から 23:59:59.999999

TIME オブジェクトは、特定の日付とタイムゾーンとは関係なく、時計に表示される時刻を表します。絶対的な時刻を表すには、タイムスタンプを使用します。

正規形式
[H]H:[M]M:[S]S[.DDDDDD|.F]
  • [H]H: 1 桁または 2 桁の時(有効な値は 00~23)
  • [M]M: 1 桁または 2 桁の分(有効な値は 00~59)
  • [S]S: 1 桁または 2 桁の秒(有効な値は 00~59)
  • [.F]: 最大で小数第 6 位まで(マイクロ秒の精度)

タイムスタンプ型

名前 範囲
TIMESTAMP 0001-01-01 00:00:00~9999-12-31 23:59:59.999999 UTC

TIMESTAMP オブジェクトは、タイムゾーンや夏時間などの慣習に関係なく、マイクロ秒精度の絶対的な時刻を表します。

  • カレンダーに表示される日付を表すには、DATE オブジェクトを使用します。
  • 時計に表示される時刻を表すには、TIME オブジェクトを使用します。
  • カレンダーと時計に表示される日付と時刻を表すには、DATETIME オブジェクトを使用します。
正規形式
YYYY-[M]M-[D]D[( |T)[H]H:[M]M:[S]S[.F]][time zone]
  • YYYY: 4 桁の年
  • [M]M: 1 桁または 2 桁の月
  • [D]D: 1 桁または 2 桁の日
  • ( |T): スペースまたは区切り文字「T」
  • [H]H: 1 桁または 2 桁の時(有効な値は 00~23)
  • [M]M: 1 桁または 2 桁の分(有効な値は 00~59)
  • [S]S: 1 桁または 2 桁の秒(有効な値は 00~59)
  • [.F]: 最大で小数第 6 位まで(マイクロ秒の精度)
  • [time zone]: タイムゾーンを表す文字列。タイムゾーンが明示的に指定されていない場合は、デフォルトのタイムゾーンである UTC が使用されます。詳しくは、タイムゾーンのセクションをご覧ください。

タイムゾーン

タイムゾーンは、タイムスタンプの構文を解析したり、タイムスタンプの形式を設定して表示したりするときに使用されます。タイムスタンプの値自体には、特定のタイムゾーンは格納されず、タイムゾーン オフセットを適用するときに変更されることもありません。

タイムゾーンは、次の 2 つの正規形式のいずれかで、文字列によって示されます。

  • 協定世界時(UTC)からのオフセット、または UTC を表す文字 Z
  • tz database からのタイムゾーン名

協定世界時(UTC)からのオフセット

(+|-)H[H][:M[M]]
Z

-08:00
-8:15
+3:00
+07:30
-7
Z

この形式を使用する場合、タイムゾーンと残りのタイムスタンプの間にスペースは使用できません。

2014-09-27 12:30:00.45-8:00
2014-09-27T12:30:00.45Z

タイムゾーン名

continent/[region/]city

タイムゾーン名は tz database から取得されます。あまり包括的ではありませんが簡潔な資料としては、Wikipedia の tz database のタイムゾーン一覧(英語)をご覧ください。

America/Los_Angeles
America/Argentina/Buenos_Aires

タイムゾーン名を使用する場合、名前と、残りのタイムスタンプの間にスペースが 1 つ必要です。

2014-09-27 12:30:00.45 America/Los_Angeles

タイムゾーン名によって 1 年の特定の期間に同じ時刻が偶然レポートされたとしても、すべてのタイムゾーン名が交換可能なわけではありません。たとえば、夏時間中に America/Los_AngelesUTC-7:00 と同じ時刻をレポートしたとしても、夏時間以外では同じ時刻は UTC-8:00 としてレポートされます。

タイムゾーンが指定されていない場合、デフォルトのタイムゾーンが使用されます。

うるう秒

タイムスタンプは 1970-01-01 00:00:00 UTC からの単純なオフセットであり、1 分が正確に 60 秒であることを前提にしています。保存されたタイムスタンプには、うるう秒は表示されません。

うるう秒を表すために秒フィールドで「:60」を使用する値が入力値に含まれている場合、タイムスタンプ値に変換されると、そのうるう秒は表示されなくなります。代わりに、その値は次の分の秒フィールドで「:00」を含むタイムスタンプとして解釈されます。

うるう秒はタイムスタンプの計算に影響を及ぼしません。すべてのタイムスタンプの計算は、うるう秒が反映されない Unix スタイルのタイムスタンプを使用して行われます。うるう秒は、実際の世界の時刻を測定する関数を使用する場合にのみ認識されます。このような関数では、うるう秒が発生すると、タイムスタンプの秒をスキップまたは繰り返すことができます。