¿Cómo convertir la fecha del calendario en cadena?
Tengo que comparar dos fechas donde la primera fecha está en el formato del calendario y otra en el formato de la secuencia (DD-MMM-aaaa). Así que quiero convertir una de las fechas de calendario en cadena y utilizar el método compareTo.
He intentado usar:
- método no sobrescribe el método de su superclase. Fragmento Android
- Animación de Android: ¿Esperar hasta que termine?
- Retardo de cajón de navegación en Android
- Proguard - referencias no resueltas a los miembros de la clase del programa
- Error al utilizar notifyDataSetChanged en el adaptador de matriz de Android
SimpleDateFormat formatter=new SimpleDateFormat("DD-MMM-yyyy"); String currentDate=formatter.format(view.getSelectedDay());
- Ciclo de vida de las aplicaciones de Android y uso de
- Error de estudio de Android cuando agrega compatibilidad con java8
- Resto objeto POST utilizando el resorte para android
- Cómo obtener valores de textarea de html en Android
- Calcular el tiempo estimado de descarga restante
- Usando setScale y setTranslate (Matrix)
- ¿Cuál es la diferencia entre usar JDK 7 vs usar JDK 8 con el nivel de cumplimiento del compilador 1.7?
- Esta clase Handler debe ser estática o pueden producirse fugas: handler final
Asumiendo que view.getSelectedDay()
devuelve un Calendar
, puede simplemente querer:
String currentDate = formatter.format(view.getSelectedDay().getTime());
(Para que tenga una referencia de Date
para pasar al format
.)
Si ese no es el problema, por favor dé más información. Sospecho que también quiere "dd" en lugar de "DD" por cierto. "DD" es el día del año mientras que "dd" es el día del mes , según la documentación de SimpleDateFormat
.
Aquí está su problema haber sido resuelto. De todos modos, ¿por qué comparar fechas a través de sus representaciones de cuerdas? ¿No sería mejor comparar objetos de la fecha como aquí ? Puede obtener el objeto Date con el método getTime () de la clase Calendar.
¿Está comparando los valores para determinar si una fecha es anterior a otra, o para ordenar? Si usted es usted puede funcionar afoul de algunas gotchas del orden de clase debido a la clasificación lexicográfica.
String s = "12-11-2001"; String s2 = "13-11-2000"; int i = s.compareTo(s2); System.out.println(i);
La salida de esto es -1, donde debería ser 1, como s2 como una FECHA es anterior a s, pero s2 es lexicográficamente después de s cuando se ordenan en orden ascendente.
Puede resultar más razonable convertir la fecha de la cadena en un objeto Date y, a continuación, utilizar before () o after ().
Lo mejor sería comparar objetos de Date
o objetos de Calendar
, creo. Muy descompuesto, da esto:
-
Comparación de objetos
Date
final Calendar calendarDate = your_date_as_a_Calendar; final String stringDate = your_date_as_a_String; final SimpleDateFormat format = new SimpleDateFormat("DD-MMM-yyyy"); final Date dateA = calendarDate.getTime(); // this gives the absolute time, that actually embeds the date! final Date dateB = format.parse(stringDate); final int comparison = dateA.compareTo(dateB);
-
Comparación de objetos de
Calendar
final Calendar calendarA = your_date_as_a_Calendar; final String stringDate = your_date_as_a_String; final SimpleDateFormat format = new SimpleDateFormat("DD-MMM-yyyy"); final Calendar calendarB = new GregorianCalendar(); calendarB.setTime(format.parse(stringDate)); final int comparison = calendarA.compareTo(calendarB);
Y entonces la comparison
será < 0
si A < B
, > 0
si A > B
, y == 0
si son iguales, según la documentación de la Fecha o del Calendario .
Lo único que tienes que tener cuidado con son:
-
La hora del día: si su apuesta de
Calendar
establece en el mismo día que suString
, pero con una hora diferente esto no funcionará (estamos comparando los instantes aquí) -
El patrón de
SimpleDateFormat
: debe coincidir con el formato de tuString
, o tendrás resultados extraños -
La localidad: ¡las fechas pueden referirse al mismo instante pero ser diferentes si se expresan en diferentes zonas horarias! Si usted tiene que manejar que usted tendrá que cuidar de la zona
TimeZone
cuando se utilizaCalendar
(ver el doc de calendario y de TimeZone para más detalles).
Al comparar fechas como cadenas debe utilizar SimpleDateFormat("yyyy-MM-dd")
. Comparándolos con el SimpleDateFormat("dd-MM-yyyy")
estará equivocado la mayor parte del tiempo debido al número menos significativo que está siendo verificado primero y el más significativo que está siendo comprobado por último.
Si debe usar el formato dd-MM-yyyy
entonces podría escribir una función que divide las cadenas y luego compara el Año / Mes / Día en el orden correcto y devuelve positivo, negativo o cero.
// Compares first date to second date and returns an integer // can be used in a similar manner as String.CompareTo() Public Static int CompareDates(String Date1, String Date2) { String[] splitDate1 = Date1.split("-"); String[] splitDate2 = Date2.split("-"); int ret = -1; if (splitDate1[2].CompareTo(splitDate2[2]) == 0) { if (spliDatet1[1].CompareTo(splitDate2[1]) == 0) { if (splitDate1[0].CompareTo(splitDate2[0]) == 0) { ret = 0; } else if (splitDate1[0].CompareTo(splitDate2[0]) > 0) { ret = 1; } } else if (splitDate1[1].CompareTo(splitDate2[1]) > 0) { ret = 1; } } else if (splitDate1[2].CompareTo(splitDate2[2]) > 0) { ret = 1; } Return ret; }
- Aidl.exe Error al crear directorios: argumento no válido
- ¿Cómo establecer una programación persistente / regular en Android?