ISODate 形式を必要とする mongo の日付フィールドを更新しようとしています。モンゴでは、次のようになります。
"crDt" : ISODate("2013-08-19T17:21:57.549Z")
私が使用しているJavaフレームワークでは、テストパラメータとして文字列を使用するように制限されているため、その文字列をaで使用しDateTimeFormatter
て正しいものにしISODateTimeFormat
てからmongoに渡そうとしています。上記のような文字列を渡すことはできません。そうしようとすると、mongo のフィールドが台無しになります。私が使用しているJoda-Timeコードの関連部分は次のようになります。
//I can't get this right.
String crDt = "2013-01-19T15:28:58.851Z";
DateTimeFormatter parser = ISODateTimeFormat.dateHourMinuteSecondMillis();
parser.parseDateTime(crDt);
// this method updates the record in mongo. This method totally works, so no
// point in pasting it here, I just can't get the parser object correct to be
// in the correct format once inserted, it needs to be the correct ISODate form.
mongo.setCrDt(recordId, parser);
コードを実行すると、.parseDateTime メソッドから次のようなエラーが発生します。
java.lang.IllegalArgumentException: Invalid format: "2013-01-19T15:28:58.851Z" is malformed at "Z"
at org.joda.time.format.DateTimeFormatter.parseDateTime(DateTimeFormatter.java:866)
私が与えている文字列は、解析するには正しくないことがわかります。Z
. _ では、基本的に、 を機能させて.parseDateTime
正しいように見えるオブジェクトを得るには、最初の文字列は何にする必要があるのでしょうか?
編集:
以下の提案を試すために更新されました。私が今遭遇した問題は IllegalArgumentException で、クラス org.joda.time.DateTime をシリアライズできません。それで、joda の time オブジェクトを保持しているように見えますか? また、Spring Data のようなマッパー フレームワークを調べて、他の提案も調べました。これには、さらに多くのことが必要なようです。これをmongoに永続化する簡単な方法は本当にありませんか?
EDIT2:
わかりました、私は今それを持っていると思います。動作中のすべてのメカニズムを完全に把握しているわけではないかもしれませんが、BasicDBObjectはDateTimeとうまく機能しません。少なくとも私が扱っている実装では、日付オブジェクトが唯一の方法のようです。私は次のことをしました:
DateTimeFormatter parser = ISODateTimeFormat.dateTime();
DateTime result;
Date newResult;
result = parser.parseDateTime(crDt);
newResult = result.toDate();
次に、BasicDBObject の newResult を渡して、mongo のレコードを更新しました。正常に動作し、レコードは正しく更新されます。