7

ISO 8601に従って、時間はさまざまな形式で指定できます。

私のプログラムは、どの正確な ISO 8601 フォーマットが指定されるかを知りません。

この場合、どのように time_t に変換できますか?

strptime形式を指定する必要があります(私の場合、事前にわかりません)。

最終的な目標: 2 つの time_t タイムスタンプを比較することです。

編集 0: 私の目標は 2 つのタイムスタンプを比較することなので、time_t から ISO 8601 への変換も機能します。

4

2 に答える 2

7

UNIX のようなマシンを使用している場合は、getdateを試してください。インターフェイスはファンキーですが、かなりうまく機能します。

どの形式が認識されるかは、環境変数 DATEMSK によって指定されたファイルによって制御されます。このファイルには、strptime に渡すことができる有効なフォーマット文字列の行が含まれている必要があります。

于 2011-07-07T23:00:42.703 に答える
2

time_t最終的には、2つの値を比較する必要があると言います。しかし、どのようにしてそれらの値を取得していますか?それらが文字列として送信される場合、マシンがをサポートしていれば、ByronWhitlockの答えはもっともらしいですgetdate()。それらがすでにtime_tある場合は、時間値を比較できます。ローカルで生成された文字列とリモートで生成された文字列を比較する必要がある場合time_tは、岩と固い場所の間に挟まれます。データの送信時にどのISO8601スタイルが使用されているかを何らかの方法で知る必要があります。

ISO 8601は、情報を交換する2つのシステムが、使用する表記法に同意すること、特に、どのフィールドを省略できるか(存在する場合)、句読点でフィールドを区切るかどうかに同意することを期待していることに注意してください。(単一の)形式を知っている場合、またはデータソースごとに使用されるISO 8601形式になるようにシステムを構成できる場合は、POSIXstrptime()関数でほとんどすべてを処理できますが、コードの方法を知る必要があります。未定義のフィールドを処理します。

規格のタイトルは、完全に「ISO 8601:2004データ要素と交換フォーマット—情報交換—日付と時刻の表現」です。そのセクション§3.7相互合意は次のように述べています。

この国際規格で特定されている表現の一部は、情報交換におけるパートナーの相互合意によってのみ許可されます。そのような合意は、表現が発生する可能性のあるフィールドが、合意された表現と明確に区​​別できない他の表現を保持することを許可されないことを保証する必要があります。

于 2011-07-08T00:28:57.950 に答える