Por fin después de tanto batallar ya dimos con la respuesta de este atascamiento que muchos de nuestros lectores de este sitio web han presentado. Si tienes algún detalle que compartir no dejes de compartir tu información.
Solución:
El resultado que está obteniendo es absolutamente correcto.
Analicemos esto:
17.08.2012 05:35:19:7600000
- 17: Día del mes (17)
- 08: Mes del año (agosto)
- 2012: Año (2012)
- 05: Hora del día (5am)
- 35: Minuto de hora (:35)
- 19: Segundo de minuto (:19)
- 7600000: Milisegundos de segundo (7,600,000)
Ahora, la forma en que la VM ve esto es que usted declara la hora del día como 5:35:19 a. m. y luego le agrega 7 600 000 milisegundos. 7.600.000 milisegundos = 7.600 segundos = 2 horas, 6 minutos, 40 segundos. 5:35:19 am + 02:06:40 = 7:41:59 am (y 0 milisegundos). Este es el resultado que está obteniendo. (También parece que no está configurando la zona horaria correctamente, por lo que el GMT string está 3 horas por detrás de su resultado).
Si desea conservar la :7600000
, que yo sepa esto no es posible. Como esto se puede simplificar en segundos, la máquina virtual lo reducirá automáticamente a los otros incrementos de tiempo. Los milisegundos (el SSSS
) debe ser para almacenar valores <1000.
Te sugiero que crees una nueva SimpleDateFormat
para su salida; pero recuerde que los milisegundos serán absorbidos por los otros tiempos (ya que todos se almacenan como un solo long
en el Date
objeto).
private String convertDate(String cdate)
SimpleDateFormat dateFormat = new SimpleDateFormat("dd.MM.yyyy HH:mm:ss:SSSSSSS");
SimpleDateFormat postFormater = new SimpleDateFormat("yyyy-MM-dd");
Date convertedDate;
try
convertedDate = dateFormat.parse(cdate);
cdate = postFormater.format(convertedDate);
catch (ParseException e)
Toast.makeText(getApplicationContext(),e.toString(),Toast.LENGTH_SHORT).show();
return cdate;
Prueba esto.
Esto es lo que necesita (pero perderá información de milisegundos):
"dd.MM.yyyy HH:mm:ss.'000000'"
si usaste "dd.MM.yyyy HH:mm:ss.SSSSSS"
obtendría tres ceros a la izquierda para sus milisegundos.
si usaste "dd.MM.yyyy HH:mm:ss.SSS'000'"
entonces podría formatear una fecha, pero no analizar ninguna fecha.
Pruébalo:
public static void main(String[] args) throws ParseException
printDate("dd.MM.yyyy HH:mm:ss.SSS");//02.05.2010 21:45:58.073
printDate("dd.MM.yyyy HH:mm:ss.SSSSSS");//02.05.2010 21:45:58.000073
printDate("dd.MM.yyyy HH:mm:ss.SSS'000'");//02.05.2010 21:45:58.073000
printDate("dd.MM.yyyy HH:mm:ss.'000000'");//02.05.2010 21:45:58.000000
tryToParseDate("dd.MM.yyyy HH:mm:ss.SSS");//good
tryToParseDate("dd.MM.yyyy HH:mm:ss.SSSSSS");//good
tryToParseDate("dd.MM.yyyy HH:mm:ss.SSS'000'");//bad
tryToParseDate("dd.MM.yyyy HH:mm:ss.'000000'");//good
private static void printDate(String formatString)
Date now = new Date();
SimpleDateFormat format = new SimpleDateFormat(formatString);
String formattedDate = format.format(now);
// print that date
System.out.println(formattedDate);
private static void tryToParseDate(String formatString)
Date now = new Date();
SimpleDateFormat format = new SimpleDateFormat(formatString);
String formattedDate = format.format(now);
// try to parse it again
try
format.parse(formattedDate);
System.out.println("good");
catch (ParseException e)
System.out.println("bad");
Reseñas y valoraciones del artículo
Si estás contento con lo expuesto, tienes la habilidad dejar un artículo acerca de qué te ha parecido este artículo.