Clase simple para convertir String a Fechas

Clase simple que valida la entrada de la cadena con un formato de fecha, si cumple con los formatos esperados, entonces crear el objeto LocalDate, de lo contrario retorna un nulo

Este es un ejemplo simple del uso de expresiones regulares para validar la forma de la cadena de entrada antes de ejecutar la conversión de la información, lo cual da un primer manejo simple de la información al momento de evaluar el dato a convertir, aunque regexp no evalúa la validez de la fecha (por ejemplo si es 32 de enero lo toma como verdadero) evalúa realmente que la forma de la cadena sea correcta.


import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.util.Locale;
import java.util.regex.Pattern;

/**
 * Simple class to handle the date objects and
 * parse from string to LocalDate
 */
public final class DateUtil {

    /**
     * Parse a String to DateLocal object in several formats
     * @param inputDate String with in date shape
     * @return LocalDate from the input string, null if is not valid
     */
    public static LocalDate parseFromString (String inputDate) {

        DateTimeFormatter standardFormat;

        LocalDate parsedStringDate = null;

        // Validate date format d/MMM/yyyy ex. 24/Apr/2021
        if (Pattern.compile("^[0-9]{2}\\/(\\w)+\\/[0-9]{4}$").matcher(inputDate).matches()) {
            standardFormat = DateTimeFormatter.ofPattern("d/MMM/yyyy", Locale.ENGLISH);
            parsedStringDate = LocalDate.parse(inputDate, standardFormat);
        }

        // Validate date format d-MMM-yy ex. 24-Apr-21
        if (Pattern.compile("^[0-9]{2}\\-(\\w)+\\-[0-9]{2}$").matcher(inputDate).matches()) {
            standardFormat = DateTimeFormatter.ofPattern("d-MMM-yy", Locale.ENGLISH);
            parsedStringDate = LocalDate.parse(inputDate, standardFormat);
        }

        // Return date object or Null
        return parsedStringDate;
    }
    
}

Acá dejo un ejemplo de uso de esta clase


public class Main {

    public static void main(String[] args) {
        String stringDate = "24-Apr-21";
        System.out.println( DateUtil.parseFromString(stringDate).toString() );
    }

}

Cálculo de fechas SQL Server

Ejemplo simple para el cálculo de diferencias en fechas

Acá hay una consulta SqlServer para el cálculo de diferencias de fechas sql, el rango de la diferencia está en días minutos y segundos, esto lo uso particularmente para cuando necesito saber el tiempo que ha pasado desde que un dato fue insertado o actualizado hasta la fecha actual.

Como dato adicional puedes consultar esta publicación para el formateo de registros del tipo datetime https://cesarg.cl/formateo-de-una-fecha-en-sql-server/

Este cálculo de fechas lo realicé en una query de SQL Server 2012, es muy sencilla y tiene como base de cálculo la fecha y hora actual del servidor, por otro lado hay que considerar que la unidad que usa sql server para restar o sumar periodos a una fecha es el día, entendiendo esto, por lo que para restar periodos inferiores a días, ejemplo: horas, minutos y segundos se debe dividir 1(día) por 24, 2460 y 2460*60 respectivamente.

El resultado de esta consulta sería algo como esto

Espero que les sea útil y cualquier comentario o mejora no dudes en realizarlo.