: Burada
bunun için kodları içeren bir StackOverflow yazıdır
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
}
}
sınıf daha sonra son derece basittir kullanarak, sadece yapın:
ObjectMapper om = new ObjectMapper();
om.setDateFormat(new TicksSinceFormat())
Bunu daha iyi kodlayabileceğimi + bunun .NET Ticks VS Java tıklamaları söz konusu olduğunda farklarla uğraşmak zorunda olduğumu farz ediyorum - ama şimdilik bu d O. Eğer birileri daha sonra daha iyi bir çözüme ya da daha fazla içgörüye sahipse, daha sonra ele alacağım - göndermekten çekinmeyin ve eğer cevabınız, eğer daha iyiyse, doğru olanı işaretleyeceğim.
DÜZENLEME: Bu question & answer'da açıkladığım gibi sunucuda ServiceStack.Text kitaplığına geçtim ve farklı ISO8601 biçimini döndürdüm. Bu format için biraz farklı ayrıştırma kullanıyorum (Jackson, milisaniye içeren ISO8601 ayrıştırmakta zorlanıyor). Ben post ediyorum diğer koduyla Elbette, - Daha iyi sürümü varsa bana bildirin (sadece daha çok yapılması gerektiğini nasıl felsefi söylemler başvurmadan yerine, bu yayını düzenlemek/kod gönderin):
@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();
}
}
Kodunuzun iyi çalışması gerektiği anlaşılıyor ... yapacağım tek değişiklik "parse" yönteminizde bir RegEx yakalama grubu kullanıyor , string.indexOf/string.substring yerine. Bu sadece bir stil şey ... Ben her zaman string.indexOf/substring biraz kırılgan ve dizin/uzunluk ile ilgili çalışmak için zor bulundu. Sadece benim düşünceme göre. –
@PhilipTenn Bana emin olacak sağlam bir Regex ve kod sağlamaya dikkat et? – kape123