文字列または数値の時間値の日付形式への変換

時系列データの時間値は、専用の日付フィールド タイプのいずれかに格納することをお勧めします。 これらのデータベース フィールドは、日時情報を格納するために特別に設計されています。 これらのフィールドを使用することでクエリのパフォーマンスが向上し、数値フィールドや文字列フィールドに時間を格納する場合より高度なデータベース クエリを実行できます。

時系列データの格納に関するベスト プラクティスの詳細

文字列フィールドまたは数値 (short、long、float、double) フィールドに時間値を格納している場合、それらを [時間フィールドの変換 (Convert Temporal Field)] ジオプロセシング ツールを使用して日付フィールド タイプに変換できます。 このツールを使用して、日時の値を解釈していずれかの日付形式へ変換するための標準方式または独自の方式を指定します。

標準形式は、[時間フィールドの変換 (Convert Temporal Field)] ツールでサポートされています。 ただし、独自の日時形式を使用して文字列フィールドに日時値を格納している場合は、独自の日時形式を作成してデータを解釈できます。 たとえば、[時間フィールドの変換 (Convert Time Field)] ツールを使用し、文字列として格納されている「Tuesday, August 20, 2002」日時値を日付形式に変換する場合は、入力時間形式を「dddd, MMMM dd, yyyy」として指定します。

注意:

  • [時間フィールドの変換 (Convert Temporal Field)] ツールを使用するとき、指定できる標準入力時刻形式は、入力時間値が文字列フィールドに格納されているか、数値 (short、long、float、double) フィールドに格納されているかによって異なります。
  • [時間フィールドの変換 (Convert Temporal Field)] ツールでは、時間値が文字列フィールドに格納されている場合のみ、独自の日時形式を指定できます。 時間値が数値フィールドに格納されている場合は、独自の日時形式を使用できません。

日時形式の文字列

日時形式の文字列には、日付と時刻の情報が一貫した形式で含まれています。 それぞれの形式の文字列は、使用可能な形式タイプの形式を組み合わせたものです。 形式タイプの例には、曜日、月、時、秒などがあります。 1 つの日時形式の文字列では、それぞれの形式タイプから 1 つの形式のみを使用する必要があります。 ただし、すべての形式タイプが特定の形式の文字列を必要とするわけではありません。 たとえば、日付形式の文字列は、一般的には時刻の情報を含めずに、年、月、日の情報で定義されます。

1 つの形式の文字列は、時刻の情報のみや、日付の情報のみ、日付と時刻の情報の組み合わせである場合があります。 各形式の文字列では、カンマなどの区切り文字も使用できます。その形式の文字列内で使用する形式は、区切り文字で区切られます。

データを解析して、データを解釈するために適切な日時形式の文字列を決定する必要があります。 次の例は、日時を解釈する場合のさまざまな形式の文字列を示しています。

日時形式の文字列の例

データ値の例文字列の形式

30/05/1978 02:34:56

dd/MM/yyyy HH:mm:ss

2/4/2010 2:39:28 PM

M/d/yyyy h:mm:ss tt

6:05:12 a.m.

h:mm:ss tt

23:31:18.345

HH:mm:ss.s

Tuesday, August 20, 2002

dddd, MMMM dd, yyyy

Wed, Aug 31 1994

ddd, MMM dd yyyy

03281999030456

MMddyyyyHHmmss

2015-07-04T13:11:26.002

yyyy-MM-ddTHH:mm:ss.sss

日時形式のカスタマイズ

カスタム形式の文字列には、1 つ以上の日時形式の指定子が含まれます。 次の表に、データの解釈のための独自の日時形式の作成に使用できる形式指定子を示します。

日時形式の指定子

形式指定子形式の種類説明

d

日が示され、それが 1 桁の場合はその先頭に 0 が付きません。

dd

日が示され、それが 1 桁の場合はその先頭に 0 が付きます。

ddd

曜日

曜日が略称で示されます。 それぞれのロケールに適した略語が使用されます。たとえば、米国では英語の「Mon」が使用されます。

ヒント:

データ値を解釈する際、曜日の有効性は検証されません。つまり、データで使用されている曜日とデータ値の日付が正しく対応しているかどうかは問題になりません。

dddd

曜日

曜日が省略されずに示されます。 それぞれのロケールに適した正式曜日名が使用されます。たとえば、米国では英語の「Monday」が使用されます。

ヒント:

データ値を解釈する際、曜日の有効性は検証されません。つまり、データで使用されている曜日とデータ値の日付が正しく対応しているかどうかは問題になりません。

M

月が示され、それが 1 桁の場合はその先頭に 0 が付きません。

MM

月が示され、それが 1 桁の場合はその先頭に 0 が付きます。

MMM

月が略称で示されます。 それぞれのロケールに適した略語が使用されます。たとえば、米国では英語の Nov が使用されます。

MMMM

月が省略されずに示されます。 この機能では、指定したロケールに適した正式月名が使用されます。たとえば、米国では英語の November が使用され、スペインではスペイン語の Noviembre が使用されます。

y

年が後ろ 2 桁で示され、その年の後ろの 2 桁が 10 未満である場合はその先頭に 0 が付きません。

ヒント:

この方法で表される年は 1950 ~ 2049 です。 49 以下の値は、21 世紀に発生したイベントとして解釈されます。たとえば 7 は 2007 として解釈されます。 50 以上の値は、20 世紀に発生したイベントとして解釈されます。たとえば 67 は 1967 として解釈されます。

yy

年が後ろ 2 桁で示され、その年の後ろの 2 桁が 10 未満である場合はその先頭に 0 が付きません。

ヒント:

この方法で表される年は 1950 ~ 2049 です。 49 以下の値は、21 世紀に発生したイベントとして解釈されます。 たとえば、07 は 2007 と解釈されます。 50 以上の値は、20 世紀に発生したイベントとして解釈されます。たとえば 67 は 1967 として解釈されます。

yyy

3 桁の数字で「年」を表します。 この方法で表される年は 1 ~ 999 です。

yyyy

4 桁の数字で 年 を表します。

gg

時代

時代または元号を表す文字列です。 それぞれのロケールに適した時代/元号値が使用されます。

T

時間区切り文字

前の日付値と後ろの時刻値を連結する区切り文字です。 通常は ISO 形式で使用されます。

h

時間

12 時間制で「時」を表します。時間が 1 桁の場合、先頭にゼロが付きません。

H

時間

24 時間制で「時」を表します。時間が 1 桁の場合、先頭にゼロが付きません。

hh

時間

12 時間制で「時」を表します。時間が 1 桁の場合、先頭にゼロが付きます。

HH

時間

24 時間制で「時」を表します。時間が 1 桁の場合、先頭にゼロが付きます。

m

「分」を表します。分が 1 桁の場合、数字の先頭にゼロが付きません。

mm

「分」を表します。分が 1 桁の場合、数字の先頭にゼロが付きます。

s

「秒」を表します。秒が 1 桁の場合、数字の先頭にゼロが付きません。

ss

「秒」を表します。秒が 1 桁の場合、数字の先頭にゼロが付きます。

s.s

秒 (1 秒未満を含む) を表します。秒が 1 桁の場合、数字の先頭にゼロが付きません。 この形式は小数第 1 位のみを表しますが、任意の小数点以下桁数を使用できます。

注意:

1 秒未満の精度は、時刻フィールドのデータ タイプのサポート内容によって制限されます。 たとえば、フィールドのデータ タイプが float または double の時刻フィールドを使用している場合、丸め誤差が発生する可能性があります。

ss.s

秒 (1 秒未満を含む) を表します。秒が 1 桁の場合、数字の先頭にゼロが付きます。 この形式は小数第 1 位のみを表しますが、任意の小数点以下桁数を使用できます。

注意:

1 秒未満の精度は、時刻フィールドのデータ型によって制限されます。たとえば、時刻フィールドのデータ型が float または double の場合、丸め誤差が発生する可能性があります。

t

時間マーカー

午前または午後を表す 1 文字の文字列です (A または P)。

tt

時間マーカー

複数文字の時間マーカー文字列 (AM、PM など)。

z

タイム ゾーン指定子

この接尾辞は、時刻値が UTC (世界協定時) であることを示します。 通常は ISO 形式で使用されます。

区切り文字

区切り文字は、テキスト データ値の情報を区切るための文字です。 通常は、カンマ (,)、コロン (:)、スペース ( ) などを区切り文字として使用します。ただし、各形式の文字列で使用できる区切り文字に制限はありません。 一般的に使用されるほとんどの区切り文字は数値フィールドに格納できないため、特に数値フィールドに格納されている日時を解釈する場合、各形式の文字列を区切り文字なしで作成できます。

まれに、上記の表の形式と競合する区切り文字がデータに含まれている場合もあります。 この場合、その形式の文字列の区切り文字を一重引用符で囲んで分離する必要があります。 通常、その形式の文字列内で一重引用符を使用して区切り文字を分離できますが、競合の可能性がない限り、一重引用符を使用しないでください。 次に例を示します。

データ値の例形式表示される日時 (MM/dd/yyyy または HH:mm:ss)

month12day30year2010

'month'MM'day'dd'year'yyyy

12/30/2010

30/12/2010

ddMMyyyy

12/30/2010

Time:18hr6min3sec

'Time:'h'hr'm'min's'sec'

18:06:03

18:6:3

HH:m:s

18:06:03

ロケール

上記の表の一部の日付形式の長い表記法では、ロケールによって有効なデータ値が決定されるため、ロケールは重要となります。 たとえば、 MMMM が値「November」と解釈されるのは、使用されているロケールが英語の場合のみです。 場合によって、その形式の文字列が長い表記法を何も使用していないならば、ロケールは日付の解釈に直接影響を与えませんが、AM/PM 指定子の解釈がロケールに左右される可能性があります。 AM/PM 指定子が含まれていない場合は、そのロケールのデフォルトの AM/PM 指定子が使用されます。

ロケールは、各形式の文字列の形式には影響しません。 たとえば、文字 M (または MM、MMM、MMMM) は、ロケールにかかわらず「月」を表します。 次の例は、日付の解釈にロケールがどのように影響するかを示しています。

データ値文字列の形式ロケール表示される日付 (MM/dd/yyyy)

November 30, 2010

MMMM dd, yyyy

英語 (米国)

11/30/2010

Noviembre 30, 2010

MMMM dd, yyyy

スペイン語 (スペイン)

11/30/2010

Mon, Feb 22, 2010

ddd, MMM dd, yyyy

英語 (米国)

2/22/2010

30/12/2010

dd/M/yyyy

すべてのロケール

12/30/2010

AM/PM 指定子

どのロケールにも標準の時間マーカー (AM/PM 指定子) があります。 ただし、独自の時間マーカーを定義できます。 該当する形式の文字列に時間マーカー (t または tt) が含まれている場合は、その時間マーカーを表す文字を定義する必要があります。 時間マーカーは、12 時間制 (h または hh) を使用している形式の文字列での使用のみに適します。 24 時間制 (H または HH) を使用している形式の文字列には適しません。 独自の時間マーカーを定義しない場合、選択されているロケールの標準の時間マーカーが使用されます。 独自の AM/PM 指定子を定義するには、時刻フィールドのデータ タイプが text である必要があります。 次に例を示します (ここでは、PM 指定子のみを使用しています)。 AM 指定子に対しても同様です。

データ値文字列の形式PM 指定子表示される時刻 (HH:mm:ss)

6:12:34 P

h:mm:ss t

P

18:12:34

6:12:34 p.m.

h:mm:ss tt

p.m.

18:12:34

6:12:34

H:mm:ss

PM

6:12:34

6:12:34 PM

h:mm:ss tt

PM

18:12:34

関連トピック