Comparar 2 fechas, para determinar cual es mayor, puede ser sencillo, sobre todo, si con lo que trabajas soporta el concepto de fecha y/o tiempo, por ejemplo: java.util.Date en java o System.DateTime en C#, que son lenguajes de programacion o incluso en hojas de datos, tipo Microsoft Excel o LibreOffice Calc.
El problema, se presenta, cuando es necesario trabajar con lenguajes que no conocen el concepto, como los shells de unix o cuando se almacenan archivos que contienen la fecha en el nombre del mismo.
En este punto la abstraccion de la fecha y la forma en como se representa, suele tomar un papel importante, dado que puede resolver completamente el problema, si se emplea el formato correcto.
Formas comunes de representar una fecha son: dia/mes/año en mexico o mes/dia/año en EEUU. Para nombres de archivos se suelen substituir las diagonales, por guiones, asi como el uso del nombre del mes y no el numero de mes. Por ejemplo:
- Jun/27/2011
- Oct/21/2011
- Jul/1/2011
- Oct/24/2005
- Jul/4/2011
- Jul/1/2011
- Jul/4/2011
- Jun/27/2011
- Oct/21/2011
- Oct/24/2005
Lo cual no es lo que se requiere, sin embargo, si se reacomoda la fecha utilizando el orden año, mes, dia:
- 2011/Jun/27
- 2011/Oct/21
- 2011/Jul/1
- 2005/Oct/24
- 2011/Jul/4
- 2005/Oct/24
- 2011/Jul/1
- 2011/Jul/4
- 2011/Jun/27
- 2011/Oct/21
El problema con el que nos encontramos es que la l esta antes que la n, en orden alfabetico, para sortear este inconveniente, en vez del nombre del mes, utilizamos el numero del mes:
- 2011/6/27
- 2011/10/21
- 2011/7/1
- 2005/10/24
- 2011/7/4
- 2005/10/24
- 2011/6/27
- 2011/10/1
- 2011/7/1
- 2011/7/4
Este resultado tampoco es correcto, esto es debido a que la longitud de los meses, es variable, por lo que, agregamos un 0 a la izquierda, cuando el mes esta formado por un solo digito (es recomendable tambien hacerlo para los dias)
- 2011/06/27
- 2011/10/21
- 2011/07/01
- 2005/10/24
- 2011/07/04
- 2005/10/24
- 2011/06/27
- 2011/07/01
- 2011/07/04
- 2011/10/01
Esto, se puede aplicar a la creacion de nombres de archivos, por ejemplo, para poder ordenarlos por una fecha en particular, sobre todo cuando la fecha de creacion, es incorrecta (cuando son enviados por correo electronico y se pierde la fecha de creacion del archivo), por ejemplo los siguientes nombres de archivos seran ordenados correctamente por el sistema operativo al momento de listarlos (esto tanto en windows, linux o mac os)
- reporte_2011-06-27.txt
- reporte_2011-10-21.txt
- reporte_2011-07-01.txt
- reporte_2005-10-24.txt
- reporte_2011-07-04.txt
- reporte_2005-10-24.txt
- reporte_2011-06-27.txt
- reporte_2011-07-01.txt
- reporte_2011-07-04.txt
- reporte_2011-10-21.txt
En unix, incluso, es posible emplear las fechas en este formato, con el comando expr, el cual puede comparar dos cadenas y determinar cual es mayor o menor.