validar - C++ verifica si una fecha es válida
introduce una fecha válida (4)
La clase de tiempo de fecha de impulso debería ser capaz de manejar lo que necesita. Ver http://www.boost.org/doc/libs/release/doc/html/date_time.html
¿Hay alguna función para verificar si una fecha dada es válida o no? No quiero escribir nada desde cero.
por ejemplo, el 32/10/2012 no es válido y el 10/10/2010 es válido
Si el formato de la fecha es constante y no desea usar el impulso, siempre puede usar strptime
, definido en el encabezado ctime
:
const char date1[] = "32/10/2012";
const char date2[] = "10/10/2012";
struct tm tm;
if (!strptime(date1, "%d/%m/%Y", &tm)) std::cout << "date1 isn''t valid/n";
if (!strptime(date2, "%d/%m/%Y", &tm)) std::cout << "date2 isn''t valid/n";
Si las barras se insertan programáticamente (supongo que sí, ya que supones que siempre estarán ahí), probablemente sería mejor validar el mes, el día y el año por separado. Por ejemplo:
if ( (month < 1) || (month > 12) ) return false;
Si su cadena está siempre en ese formato, lo más fácil sería dividir la cadena en sus tres componentes, rellenar una estructura tm
y pasarla a mktime()
. Si devuelve -1, entonces no es una fecha válida.
También podría usar Boost.Date_Time para analizarlo:
string inp("10/10/2010");
string format("%d/%m/%Y");
date d;
d = parser.parse_date(inp, format, svp);