2017-11-27 21 views
0

ISO8601形式のタイムスタンプを作成するコードがありますが、受信した日付が無効な形式の場合、変換は失敗します。ISO8601形式のタイムスタンプで無効な値を示す標準的な方法はありますか?

無効なタイムスタンプをこの形式で表す標準的な方法があるかどうかを知りたいと思いますか?

ウィキペディアは1583年より前の年を言い、通常の操作では処理されていないと考えていたので、最初に値を0000-01-01T00:00:00Zのように設定していました。無効な値を示す標準的な方法がある場合は、むしろ代わりに使用したいと思います。

+1

どのプログラミング言語を使用しますか? –

+0

標準的な表現方法があれば、有効なタイムスタンプにはなりませんか? – jsheeran

+0

C++は私が使用しているものですが、特定の言語の仕様ではなく、より一般的なアプローチです。 –

答えて

1

ISO 8601は、無効なタイムスタンプを表す文字列を定義していません。 有効なのフォーマットされた文字列がどのように見えるかだけを定義します。

また、ISO 8601はproleptic Gregorian calendarを使用しています。つまり、すべての正の年が有効です。それは負の年数(合意により)を許しますが、BC/BCEのような時代は定義しません。言い換えれば、0001-01-01の1日前は、予後のグレゴリオ暦では0000-12-31となります。 0000-01-01の1日前には、-0001-12-31(および0年はうるう年)となります。

コードで「無効」と表現する方法は、完全に言語と実装に依存します。多くの場合、nullが適切です。厳密に文字列を扱っているのであれば、おそらく""が良いでしょう。より多くの文脈なしに言うのは難しい。

+0

データがJSON文字列として交換されているので、空の文字列はわかりやすいアプローチのように聞こえます。 –

+0

'null'(文字列ではありません)はJSONでも有効です。逆シリアル化されているものによっては、より適切かもしれません。たとえば、.NET開発者として、そのフィールドをNullable (別名 'DateTime?')に逆シリアル化することができます。この場合、nullが自動的に入りますが、空の文字列は、パーサーにどのように対処するか教えてください。 –

+0

[この回答](https://stackoverflow.com/a/21121267/634824)は、意思決定にも役立ちます。 –

関連する問題