Analizar ASP.NET MVC devolvió la fecha utilizando la biblioteca Jackson JSON en Java

Estoy analizando JSON del servidor en mi aplicación de Android usando la biblioteca de Jackson JSON. Sin embargo, las solicitudes de análisis fallan cuando recibo DateTime ya que está en este formato:

"/Date(1277931782420)/" 

Sé que debo hacer algo como:

 ObjectMapper om = new ObjectMapper(); om.setDateFormat(new TicksSinceFormat()); 

Pero no tengo ni idea de si puedo usar SimpleDateFormat en absoluto (¿y qué formato de cadena usaría?) O necesito escribir mi propio parser DateFormat. Por lo tanto, me gustaría seriamente si alguien podría ayudar con el ejemplo de código.

EDIT: OK, vea mi respuesta para el código completo.

Esto resultó ser más difícil de lo que esperaba:

 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 } } 

El uso de la clase es entonces extremadamente simple, solo haz lo siguiente:

 ObjectMapper om = new ObjectMapper(); om.setDateFormat(new TicksSinceFormat()) 

Supongo que esto se puede codificar mejor + que voy a necesitar para hacer frente a las diferencias cuando se trata de. NET Ticks VS Java ticks – pero por ahora esto va a hacer. Si alguien tiene una mejor solución o más información sobre los problemas mencionados voy a tratar con más tarde – no dude en publicar y voy a marcar su respuesta como correcta si es mejor.

EDIT: Como he explicado en esta pregunta y respuesta he cambiado a la biblioteca ServiceStack.Text en el servidor y devuelve diferente, formato ISO8601. Para ese formato estoy usando un parsing ligeramente diferente (ya que Jackson tiene problemas para analizar ISO8601 que contiene milisegundos). Por supuesto, al igual que con otro código que estoy publicando – hágamelo saber si tiene una mejor versión (sólo por favor, el código postal / editar este post, en lugar de recurrir a la retórica filosófica sobre cómo debe hacerse):

 @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(); } } 

Puedo estar equivocado sobre esto, ya que no he llegado muy lejos en el desarrollo de Android, pero el formato que presentó:

 "/Date(1277931782420)/" 

Aparece ser el tiempo de la época de Unix.

Si ese es el caso, no desea / necesita utilizar SimpleDateFormat . En su lugar, intente crear un Long de él y pasar al constructor Date , teniendo en cuenta si se trata de segundos o milisegundos basado en el valor de época.

Aquí hay una publicación StackOverflow que proporciona el código para hacerlo: https://stackoverflow.com/a/535017/463196

  • Tiempo vs fecha vs calendario java
  • La lista expandible no se está expandiendo
  • Error: no se puede encontrar la clase de símbolo RecyclerView
  • Resolver url abreviada en Android
  • ¿Diferencia entre @string y @ + string?
  • Cómo implementar el reconocimiento de gestos en el uso de Android
  • ¿Cómo puedo supervisar la base de datos de otra aplicación para los cambios?
  • Cómo hacer una relación bidireccional uno-a-uno por GreenDAO?
  • ¿Es posible anular un método nativo en una clase Java en Android / dalvik?
  • Eclipse SDK Manager no se muestra
  • Cómo llamar a un método no estático de un método estático
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.