Cómo convertir una fecha en formato cadena a una marca de tiempo (timestamp)

JavaBeginner
Practicar Ahora

Introducción

Se puede convertir una fecha en formato de cadena a una marca de tiempo (timestamp) utilizando las clases SimpleDateFormat, Timestamp y Date de Java. Este laboratorio cubrirá dos formas de convertir una cadena de fecha a una marca de tiempo.

Convertir una cadena (String) a una fecha (Date) utilizando el método parse()

import java.text.SimpleDateFormat;
import java.sql.Timestamp;
import java.util.Date;

public class StringToTimestamp {
    public static void main(String[] args) throws Exception {
        // date in string format
        String stringDate = "2021-01-07 02:02:16.172";
        try {
            // creating date format
            SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss.SSS");
            // parsing string to date using parse() method
            Date parsedDate = dateFormat.parse(stringDate);
            // finally creating a timestamp
            Timestamp timestamp = new java.sql.Timestamp(parsedDate.getTime());
            System.out.println(timestamp);
        } catch(Exception e) {
            System.out.println(e);
        }
    }
}

Para ejecutar este programa, abre la terminal y navega hasta el directorio ~/project/.

Convertir una fecha en formato cadena (String) a una marca de tiempo (Timestamp) utilizando el método valueOf()

Esta es otra forma de convertir una cadena de fecha a una marca de tiempo (timestamp) utilizando el método valueOf() de la clase java.sql.Timestamp. Este es un método sencillo y no es necesario realizar un código complejo.

import java.text.SimpleDateFormat;
import java.sql.Timestamp;
import java.util.Date;

public class StringToTimestamp {
    public static void main(String[] args) throws Exception {
        // date in string format
        String stringDate = "2021-01-07 02:02:16.172";
        try {
            // converting string date to timestamp using valueOf() method
            java.sql.Timestamp timestamp = java.sql.Timestamp.valueOf(stringDate);
            System.out.println(timestamp);
        } catch(Exception e) {
            System.out.println(e);
        }
    }
}

Compilar y ejecutar el programa

Abre la terminal y navega hasta el directorio ~/project/. Utiliza el siguiente comando para compilar y luego ejecutar el código:

javac StringToTimestamp.java && java StringToTimestamp

Manejar un formato de fecha incorrecto

Si la cadena está en un formato incorrecto, obtendrás un error de excepción: java.text.ParseException: Unparseable date:. Para manejar este error, podemos agregar un bloque catch para mostrar un mensaje de error.

import java.text.SimpleDateFormat;
import java.sql.Timestamp;
import java.util.Date;

public class StringToTimestamp {
    public static void main(String[] args) throws Exception {
        // date in string format
        String stringDate = "2021-01-07 02:02:16";
        try {
            // creating date format
            SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss.SSS");
            // parsing string to date using parse() method
            Date parsedDate = dateFormat.parse(stringDate);
            // finally creating a timestamp
            Timestamp timestamp = new java.sql.Timestamp(parsedDate.getTime());
            System.out.println(timestamp);
        } catch(Exception e) {
            System.out.println("Error: " + e.getMessage());
        }
    }
}

Convertir tiempo Epoch a Timestamp

Convierte el tiempo epoch a marcas de tiempo (timestamps) utilizando el siguiente código:

import java.sql.Timestamp;

public class StringToTimestamp {
    public static void main(String[] args) throws Exception {
        // epoch time
        long epochTime = 1609934536172L;
        try {
            // create Timestamp object
            Timestamp timestamp = new Timestamp(epochTime);
            System.out.println(timestamp);
        } catch(Exception e) {
            System.out.println("Error: " + e.getMessage());
        }
    }
}

Convertir Timestamp a String

Convierte una marca de tiempo (timestamp) al formato de cadena utilizando SimpleDateFormat.

import java.text.SimpleDateFormat;
import java.sql.Timestamp;

public class StringToTimestamp {
    public static void main(String[] args) throws Exception {
        // timestamp
        Timestamp timestamp = new Timestamp(System.currentTimeMillis());

        try {
            // create SimpleDateFormat object
            SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss.SSS");
            // format Timestamp object
            String formattedDate = dateFormat.format(timestamp);
            // print formatted date
            System.out.println(formattedDate);
        } catch(Exception e) {
            System.out.println("Error: " + e.getMessage());
        }
    }
}

Utilizar la clase Calendar

En lugar de SimpleDateFormat, también podemos usar la clase Calendar para convertir una fecha en formato cadena a una marca de tiempo (timestamp).

import java.util.Calendar;
import java.sql.Timestamp;

public class StringToTimestamp {
    public static void main(String[] args) throws Exception {
        // string date
        String stringDate = "2021-01-07 02:02:16.172";
        try {
            // create Calendar object
            Calendar calendar = Calendar.getInstance();
            // set calendar date with string date
            calendar.setTime(new java.text.SimpleDateFormat("yyyy-MM-dd hh:mm:ss.SSS").parse(stringDate));
            // convert calendar to timestamp
            java.sql.Timestamp timestamp = new java.sql.Timestamp(calendar.getTimeInMillis());
            System.out.println(timestamp);
        } catch(Exception e) {
            System.out.println("Error: " + e.getMessage());
        }
    }
}

Utilizar la clase ZonedDateTime

También podemos convertir una fecha en formato cadena a una marca de tiempo (timestamp) utilizando la clase ZonedDateTime.

import java.time.ZoneId;
import java.time.ZonedDateTime;
import java.time.format.DateTimeFormatter;
import java.sql.Timestamp;

public class StringToTimestamp {
    public static void main(String[] args) throws Exception {
        // string date
        String stringDate = "2021-01-07 02:02:16.172";
        try {
            // create DateTimeFormatter object and specify the format of the string date
            DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.SSS");
            // create ZonedDateTime object and parse the string date
            ZonedDateTime zonedDateTime = ZonedDateTime.parse(stringDate, formatter.withZone(ZoneId.systemDefault()));
            // convert ZonedDateTime to timestamp
            Timestamp timestamp = Timestamp.valueOf(zonedDateTime.toLocalDateTime());
            System.out.println(timestamp);
        } catch(Exception e) {
            System.out.println("Error: " + e.getMessage());
        }
    }
}

Ejecutar el programa

Abre la terminal y navega hasta el directorio ~/project/. Utiliza el siguiente comando para compilar y luego ejecutar el código:

javac StringToTimestamp.java && java StringToTimestamp

Resumen

En este laboratorio, hemos aprendido cómo convertir una fecha en formato cadena (String) a una marca de tiempo (Timestamp) en Java utilizando diferentes métodos, incluyendo las clases SimpleDateFormat, Timestamp, Date, Calendar y ZonedDateTime. Los métodos SimpleDateFormat y Timestamp son los más fáciles de implementar, mientras que el método ZonedDateTime es el más complicado pero ofrece la mayor flexibilidad.