これは厳しいであることが判明した後、私が期待される:クラスを使用して
public class TicksSinceFormat extends DateFormat {
@Override
public StringBuffer format(Date date, StringBuffer buffer, FieldPosition field) {
long millis = date.getTime();
return new StringBuffer("/Date(" + millis + ")/");
}
@Override
public Date parse(String string, ParsePosition position) {
int start = string.indexOf("(") + 1;
int end = string.indexOf(")");
String ms = string.substring(start, end);
Date date = new Date(Long.parseLong(ms));
position.setIndex(string.length() - 1); // MUST SET THIS
return date;
}
@Override
public Object clone() {
return new TicksSinceFormat(); // MUST SET THIS
}
}
はただやる、そして非常に簡単です:
ObjectMapper om = new ObjectMapper();
om.setDateFormat(new TicksSinceFormat())
これはコードを改善することができる+私は.NET Ticks VS Java ticksに関しては違いを扱う必要があると推測していますが、 o。誰かがより良い解決策を持っているか、上記の問題についてのより詳細な洞察があれば、私は後で対処します。投稿を自由にしてください。
EDIT:これで説明したように、question & answer私はサーバーのServiceStack.Textライブラリに切り替えました。これは異なるISO8601形式を返します。このフォーマットでは、少し異なる構文解析を使用しています(JacksonはISO8601の解析に問題があり、ミリ秒が含まれています)。私が投稿してる他のコードと同じようにもちろん、 - あなたはより良いバージョンを持っているなら、私に知らせて(ただ、むしろそれが行われるべきかについて哲学的なレトリックに頼るよりも、この投稿を編集/コードを投稿してください):
@SuppressLint("SimpleDateFormat")
public class JacksonSimpleDateFormat extends SimpleDateFormat {
public JacksonSimpleDateFormat() {
if (mParser == null) {
mParser = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss");
mParser.setTimeZone(TimeZone.getTimeZone("UTC"));
}
}
@Override
public StringBuffer format(Date date, StringBuffer buffer, FieldPosition field) {
return mParser.format(date, buffer, field);
}
private static SimpleDateFormat mParser;
@Override
public Date parse(String string, ParsePosition position) {
String str = string.split("\\.")[0];
Date date = null;
try {
date = mParser.parse(str);
} catch (ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
position.setIndex(string.length() - 1);
return date;
}
@Override
public Object clone() {
return new JacksonSimpleDateFormat();
}
}
あなたのコードは正常に動作するはずです...私が行う唯一の変更は、 'parse'メソッド、string.indexOf/string.substringの代わりに。これは単なるスタイルです...私はいつもstring.indexOf/substringがインデックス/長さに関して働くにはやや脆弱で扱いにくいことを発見しました。ちょうど私の謙虚な意見。 –
@PhilipTenn確かに動作する堅牢な正規表現とコードを私に提供するように気をつけますか? – kape123