0

私の目的は、以下の 2 つの要件を処理できる Java クラスを作成することです。

(A) 1. タイムスタンプの形式が期待される形式と一致するかどうかを確認します。
CCYY-MM-DD'T'hh:mm:ss'.0000000000+'uh:um"
例: 予想される形式は静的ではありません。次のいずれかになります。"2013-09-10T18:30:20.123456+10: 00" または "2013-09-10T18:30:20.123+10:00".
精度と値については気にしません。形式だけが重要です。

(B) 2. タイムスタンプが特定の範囲内にあるかどうかを確認します。
例: タイムスタンプが「2013-09-10 18:27」と「2013-09-10 18:33」の間にあるかどうかを確認します。(検証は分レベルの精度までしかありません) (+ または - 2 分のデルタである可能性があります)

最初の目的に関する質問はここに投稿されました Java : Custom Timestamp Format : verify format to microsec precision

2 番目の目的に関して: 質問:

Javaクラスを使用して、タイムスタンプが指定された範囲内にあるかどうかを検証するにはどうすればよいですか?

クラスへの入力は 3 つの引数になります

  1. 文字列として検証されるタイムスタンプ
  2. 文字列としての下位範囲のタイムスタンプ
  3. 文字列としてのより高い範囲のタイムスタンプ。

私はこれを試しました

String date = "2013-09-10T18:30:12.123456789+10:00"
SimpleDateFormat df2 = new SimpleDateFormat("yyyyMMddHHmm"); 
date = date.substring(0,22)+"+10:00"; 
Date newDate = df.parse(date); 
timestamp_value = df2.format(newDate);

現在 、timestamp_value は 201309101830 です timestamp_value が 201309101827
より大きいかどうかを確認します。timestamp_value が 201309101833 より小さいかどうかを確認します これで問題ありません 。

ただし、これは大雑把な方法だと思うので、より良い解決策があるかどうかを知りたいです。Timestamp オブジェクトに変換できれば、.before と .after が役立つと思います。助言がありますか ?

4

1 に答える 1

0

1) "2013-09-10T18:30:20.123+10:00" は XSD dateTime 形式であり、これを解析する最良の方法はこれです

XMLGregorianCalendar xgc = javax.xml.datatype.DatatypeFactory.newInstance().newXMLGregorianCalendar(date);

日付形式が間違っている場合、IllegalArgumentException がスローされます

2) タイムスタンプが特定の範囲内にあるかどうかを確認する最も簡単な方法は、日付からミリ秒を取得し、分に切り捨て、算術比較を使用することです t >= from - delta && t <= to + delta

于 2013-09-16T05:53:13.063 に答える