example java date android-date

java - example - Convertir la cadena de fecha a un formato diferente



date to string java (5)

Tengo una cadena que contiene una fecha en el formato YYYY-MM-DD .

¿Cómo me sugeriría que lo convierta de la mejor manera posible al formato DD-MM-YYYY ?

Así es como lo haría ingenuamente:

import java.util.*; public class test { public static void main(String[] args) { String date = (String) args[0]; System.out.println(date); //outputs: YYYY-MM-DD System.out.println(doConvert(date)); //outputs: DD-MM-YYYY } public static String doConvert(String d) { String dateRev = ""; String[] dateArr = d.split("-"); for(int i=dateArr.length-1 ; i>=0 ; i--) { if(i!=dateArr.length-1) dateRev += "-"; dateRev += dateArr[i]; } return dateRev; } }

Pero ¿hay alguna otra forma más elegante y efectiva de hacerlo? Es decir. utilizando alguna característica incorporada? No he podido encontrar uno, mientras buscaba rápidamente la API.

¿Alguien aquí conoce una forma alternativa?


Aquí está la respuesta moderna.

private static DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd-MM-uuuu"); public static String doConvert(String d) { return LocalDate.parse(d).format(formatter); }

Con esto podemos hacer por ejemplo:

System.out.println(doConvert("2017-06-30"));

Esto imprime

30-06-2017

Estoy explotando el hecho de que el formato que tiene, YYYY-MM-DD , cumple con el estándar ISO 8601, un estándar que las clases modernas de fecha y hora de Java "entienden" de forma nativa, por lo que no necesitamos un formateador explícito para el análisis, solo uno para formatear.

Cuando se hizo esta pregunta en 2011, SimpleDateFormat también fue la respuesta que habría dado. La nueva API de fecha y hora salió con Java 8 a principios de 2014 y también ha sido portada a Java 6 y 7 en el proyecto ThreeTen-Backport. Para Android, vea el proyecto ThreeTenABP. Entonces, honestamente, en estos días no veo ninguna excusa para seguir usando SimpleDateFormat y Date . Las clases más nuevas son mucho más amigables con los programadores y es agradable trabajar con ellas.


Es mejor utilizar un objeto SimpleDateFormat ( API ) para convertir la cadena en un objeto de fecha. Luego, puede convertir a través de otro objeto SimpleDateFormat a cualquier representación de String que desee, lo que le otorga una tremenda flexibilidad.


Si no está buscando la conversión de cadena a fecha y viceversa, y por lo tanto no necesita manejar fechas no válidas ni nada, la manipulación de cadenas es la forma más fácil y eficiente. Pero es mucho menos legible y mantenible que usar DateFormat.

String dateInNewFormat = dateInOldFormat.substring(8) + dateInOldFormat.substring(4, 8) + dateInOldFormat.substring(0, 4)


Utilice java.util.DateFormat :

DateFormat fromFormat = new SimpleDateFormat("yyyy-MM-dd"); fromFormat.setLenient(false); DateFormat toFormat = new SimpleDateFormat("dd-MM-yyyy"); toFormat.setLenient(false); String dateStr = "2011-07-09"; Date date = fromFormat.parse(dateStr); System.out.println(toFormat.format(date));


import java.util.DateFormat; // Convert String Date To Another String Date public String convertStringDateToAnotherStringDate(String stringdate, String stringdateformat, String returndateformat){ try { Date date = new SimpleDateFormat(stringdateformat).parse(stringdate); String returndate = new SimpleDateFormat(returndateformat).format(date); return returndate; } catch (ParseException e) { // TODO Auto-generated catch block e.printStackTrace(); return ""; } } //------- String resultDate = convertStringDateToAnotherStringDate("1997-01-20", "yyyy-MM-dd", "MM/dd/yyyy") System.out.println(resultDate);

Resultado (cadena de fecha): 20/01/1997