2016-06-30 2 views
4

一部のDateTime値を返すODataサービスがあります。それらはバックエンドのテーブルにTIMESTAMPLとして保存されます(他のデータもあります)。TIMESTAMP(timestamp long)をTIMESTAMPに60で終了します。

値'20160630084459.5000 'があります。 MOVE-CORRESPONDINGを'et_entityset 'に置きます。ここでは'TIMESTAMP'です。丸めのため、'20160630084460 'になります。秒は'00'から'59 'の間でなければならないので、これは有効な値ではありません。

私の主な問題は、私のテーブルが極端に多くのエントリを持っているので、私はこのエラーを修正するための演奏方法が必要です。

無効なタイムスタンプは、THX

答えて

2

すべてのTIMESTAMPL値の最初が間違っている、タイプミスでした。最初の8つの位置は、YYYYMMDDパターンに一致しません。だから、20163006084459.50002016063020163006)の代わりに20160630084459.5000とする必要があります。

ここで第2の方法は、あなたが望むものに変換する方法です。

ここに出力があります。

20.160.630.084.459,5000000
20.160.630.084.460
20.160.630.084.459

+0

私はABAPオブジェクトの使用に賛成ですが、この場合、何らかの形でポイントを取得するのに役立ちません。 – vwegert

+0

@vwegert詳しいことはありますか?私はこのような簡単な例のためにフォームを使うべきですか? – Jagger

+1

START-OF-SELECTION。 DATA(l_t1)= CONVタイムスタンプ( '20160630084459.5000')。 CONVERT TIME STAMP l_t1時間ゾーンsy-zonlo日付データ(l_date)時刻データ(l_time)。 CONVERT日付l_date時刻l_time時刻データ(l_t2)時刻ゾーンsy-zonlo。 WRITE/l_t2。 – vwegert

0

あなたの質問に床に言及したが、それは何が起こっているかではありません。値は四捨五入されています。 TIMESTAMPLからTIMESTAMPへの割り当てでFLOORをシンプルに使用すると、必要な答えが得られます。 MOVE-CORRESPONDINGを使用する必要がある場合は、まずそれを行い、その後、タイムスタンプの割り当てを個別に行います。

ただし、0:59.9は1:00ではなく0:59に変換されます。その2番目の行が見つからない場合は、FLOORコマンドを使用してください。そうでなければ、それはより複雑になり、あなたはパフォーマンスヒットを取るでしょう。