convertToSaveDateTime static method
esta funcion recibe un string con una fecha y hora en formato DD/MM/YYYY HH:MM:SS y devuelve la fecha en formato ISODate (YYYY-MM-DDTHH:MM:SSZ) si la fecha es válida, de lo contrario devuelve null.
Parámetros:
fechaString(String): La cadena de fecha en formato DD/MM/YYYY HH:MM:SS.
Retorna:
String?: La fecha en formato ISODate (YYYY-MM-DDTHH:MM:SSZ) si es válida, de lo contrario null.
Ejemplo:
String? fechaISO = convertToISODate('31/12/2021 09:31:20');
print(fechaISO); // Imprime: 2021-12-31T09:31:20.000Z
La función convertToISODate realiza las siguientes operaciones:
Implementation
static String? convertToSaveDateTime(String fechaString) {
///Expresion regular para validar que la fecha ya no venga en su formato de guardado
///Si la fecha viene en el formato : YYYY-MM-DDTHH:MM:SSZ devuelve la misma fecha
final regex = RegExp(r'^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}Z$');
bool fechaValida = regex.hasMatch(fechaString);
if (fechaValida) return fechaString;
/// Expresión regular que valida una fecha en formato DD/MM/YYYY HH:MM:SS
final RegExp dateTimeRegExp =
RegExp(r'^(\d{2})\/(\d{2})\/(\d{4})(?: (\d{2}):(\d{2}):(\d{2}))?$');
/// Valida si la fecha cumple con el formato DD/MM/YYYY
if (dateTimeRegExp.hasMatch(fechaString)) {
/// Extrae el día, mes, año, hora, minuto y segundo de la cadena de fecha
final match = dateTimeRegExp.firstMatch(fechaString);
int day = int.parse(match?.group(1) ?? '0');
int month = int.parse(match?.group(2) ?? '0');
int year = int.parse(match?.group(3) ?? '0');
int hour = int.parse(match?.group(4) ?? '0');
int minute = int.parse(match?.group(5) ?? '0');
int second = int.parse(match?.group(6) ?? '0');
/// Intenta crear un objeto DateTime con los valores de día, mes, año, hora, minuto y segundo
try {
DateTime dateTime = DateTime(year, month, day, hour, minute, second);
/// Verifica si la fecha es válida
if (dateTime.day == day &&
dateTime.month == month &&
dateTime.year == year &&
dateTime.hour == hour &&
dateTime.minute == minute &&
dateTime.second == second) {
String formattedDateTime =
"${dateTime.year.toString().padLeft(4, '0')}-"
"${dateTime.month.toString().padLeft(2, '0')}-"
"${dateTime.day.toString().padLeft(2, '0')}";
formattedDateTime += "T${dateTime.hour.toString().padLeft(2, '0')}:"
"${dateTime.minute.toString().padLeft(2, '0')}:"
"${dateTime.second.toString().padLeft(2, '0')}"
".000Z";
/// Devuelve la fecha en formato "YYYY-MM-DD HH:MM:SS.000Z"
return formattedDateTime;
// .toUtc().toIso8601String();
} else {
FlutterUtilsProvider.logDebug('La fecha no es válida: $fechaString');
/// Si la fecha no es válida, devuelve null
return null;
}
} catch (error) {
FlutterUtilsProvider.logDebug(
'Error al convertir la fecha $fechaString a ISODate: $error');
/// Si la creación de DateTime falla, devuelve null
return null;
}
} else {
FlutterUtilsProvider.logDebug(
'La fecha no cumple con el formato DD/MM/YYYY $fechaString');
/// Si la fecha no cumple con el formato DD/MM/YYYY, devuelve null
return null;
}
}