Diferencia entre java.sql.Time, java.sql.Timestamp y java.sql.Date en Java

En todos los proyectos de software, estamos utilizando java.sql.Time, java.sql.Timestamp y java.sql.Date en muchos casos. Siempre que la aplicación java interactúe con la base de datos, deberíamos usar estos en lugar de java.util.Date. La razón es JDBC, es decir, la conectividad de la base de datos java los utiliza para identificar la fecha y la marca de tiempo de SQL.

Aquí veamos las diferencias entre los tres y también sus usos con algunos ejemplos:

java.sql.Tiempo                                java.sql.Timestamp                              java.sql.Fecha                                     

Almacena horas, minutos. Solo segundos y milisegundos.

No almacena componentes de fecha y, por lo tanto, una representación adecuada para SQL Time

Almacena los componentes de fecha y hora

Almacena años, meses y días solo. 

No almacena componentes de tiempo y, por lo tanto, una representación adecuada para SQL Date

Esto depende y extiende java.util.Date Esto es dependiente y extiende java.util.Date Esto es independiente y no extiende java.util.Date
Como no tiene información de fecha, la información de fecha se normaliza y se puede establecer en 0 para confirmar la FECHA ANSI SQL Como tienen fecha y hora, se les da explícitamente Como no tiene información de tiempo, la información de tiempo se normaliza y se puede establecer en 0 para confirmar ANSI SQL Time
Debe tener 2 columnas, una para java.sql.Date y java.sql.Time explícitamente. En comparación con java.util.Date, ya que no almacena detalles de nanosegundos aunque la información de fecha y hora está presente, el método igual entre java.sql.Timestamp y java.util.Date solo devuelve falso. Solo una columna es suficiente para tener fecha y hora. La diferencia de nanosegundos es muy útil en muchos escenarios de Java, el método setTimestamp() se usa para establecer la marca de tiempo. Si usamos la marca de tiempo como tipo de datos, usando la función DATE(), podemos extraer solo la fecha, y usando la función TIME(), podemos extraer el tiempo solo.  Necesita tener 2 columnas, una para java.sql.Date y java.sql.Time explícitamente desde Java, el método setDate() se usa para establecer la fecha.
Solo para saber sobre el valor temporal de la ocurrencia de la acción. es decir, si el estudiante está disponible en ese momento en cualquier día, etc.,

Esta es la mayor ventaja. En Java, podemos escribir las siguientes consultas y obtener la parte de fecha y hora respectivamente de la siguiente manera: 

–Para obtener la fecha 

seleccione FECHA (<nombre de columna>) de <nombre de tabla> 

–Para conseguir tiempo 

seleccione HORA (<nombre de columna>) de <nombre de tabla> 

Para las entradas de registro, para conocer el valor absoluto de los tiempos transaccionales, podemos usar la marca de tiempo

Solo para saber sobre el valor de la fecha de ocurrencia de la acción. es decir, si el estudiante está disponible ese día

Uno puede pensar que como java.sql.Timestamp puede satisfacer el requisito de almacenar tanto la fecha como la hora, entonces, ¿cuál es la necesidad de tener java.sql.Date y java.sql.Time? Veámoslos en detalle en cuanto a los escenarios.

Ejemplo 1: en las escuelas, universidades, lugares de trabajo donde sea, para saber si el estudiante/empleado está disponible en un día específico o no, es suficiente mantener solo java.sql.Date

Por ejemplo: EmployeeXXX disponible en cierta fecha o no (o)

StudentXXX presente en la escuela, etc.,

Entonces, en general, podemos tener una tabla como (vamos a verificar en MySQL)

// Aquí empOrStuInformation es el nombre de la tabla

crear tabla empOrStuInformation

  (

  id int NOT NULL AUTO_INCREMENT CLAVE PRINCIPAL,

  empOrStuName varchar(20),

  empOrStuFecha de disponibilidad

  );

Insertar consultas:

insert into empOrStuInformation(empOrStuName,empOrStuAvailability) values('xxx',now());
insert into empOrStuInformation(empOrStuName,empOrStuAvailability) values('yyy',now()); 
insert into empOrStuInformation(empOrStuName,empOrStuAvailability) values('zzz',now());

now() devuelve la fecha y la hora actuales en la zona horaria configurada como una string, pero dado que tenemos FECHA como tipo de datos, solo obtenemos la fecha como valor insertado.

Producción:

Java

import java.sql.Date;
public class GFG {
    public static void main(String[] args)
    {
        String empOrStuAvailableDate = "2021-01-01";
        Date utilAvailabilityDate
            = new SimpleDateFormat("yyyy-MM-dd")
                  .parse(empOrStuAvailableDate);
        // jdbc connectivity expects java.sql.Date
        java.sql.Date sqlAvailabilityDate
            = new java.sql.Date(
                utilAvailabilityDate.getTime());
  
        try {
            Class.forName("com.mysql.jdbc.Driver");
  
            // Here test is the databasename
            // username is root and password is root
            Connection con = DriverManager.getConnection(
                "jdbc:mysql://localhost:3306/test", "root",
                "root");
  
            PreparedStatement pStmt = con.prepareStatement(
                "insert into empOrStuInformation (empOrStuName,empOrStuAvailability) values(?,?)");
            
            // As we are using Date datatype, we are using
            // setDate only...
            pStmt.setString(1, "AAAA");
            
            // The setDate() method is used to set date
            // while setTimestamp() is used to set time.
            pStmt.setDate(2, sqlAvailabilityDate);
            pStmt.executeUpdate();
            pStmt.close();
            con.close();
        }
        catch (Exception ex) {
            System.out.println(ex);
        }
    }
}

Producción:

java.sql.Marca de tiempo:

La columna java.sql.Timestamp es muy útil para registrar las entradas. Por ejemplo: a qué hora el estudiante/empleado llegó a las instalaciones y salió de las instalaciones, a qué hora se entrega el registro, a qué hora se realiza el trabajo, etc.

En Mysql, de la siguiente manera, podemos crear la tabla para la columna que contiene una marca de tiempo.

crear tabla empOrStuInformation1

  (

id int NOT NULL AUTO_INCREMENT CLAVE PRINCIPAL,

empOrStuName varchar(20),

 empOrStuDisponibilidad FECHA, 

 empOrStuLogEntry marca de tiempo

  );

Java

import java.sql.Date;
import java.sql.Timestamp;
public class GFG {
    public static void main(String[] args)
    {
        String empOrStuAvailableDate = "2021-01-01";
        Date utilAvailabilityDate
            = new SimpleDateFormat("yyyy-MM-dd")
                  .parse(empOrStuAvailableDate);
        
        // jdbc connectivity expects java.sql.Date
        java.sql.Date sqlAvailabilityDate
            = new java.sql.Date(
                utilAvailabilityDate.getTime());
  
        // create a java timestamp object that represents
        // the current time (i.e., a "current timestamp")
        Calendar calendarInstance = Calendar.getInstance();
        
        java.sql.Timestamp sampleJavaTimestampObject
            = new java.sql.Timestamp(
                calendarInstance.getTime().getTime());
        try {
            Class.forName("com.mysql.jdbc.Driver");
            
            // Here test is the databasename
            // username is root and password is root
            Connection con = DriverManager.getConnection(
                "jdbc:mysql://localhost:3306/test", "root",
                "root");
  
            PreparedStatement pStmt = con.prepareStatement(
                "insert into empOrStuInformation1 (empOrStuName,empOrStuAvailability,empOrStuLogEntry) values(?,?,?)");
              
            // As we are using Date datatype, we are using
            // setDate only...
            pStmt.setString(1, "AAAA");
            
            // The setDate() method is used to set date
            pStmt.setDate(2, sqlAvailabilityDate);
            
            // setTimestamp() is used to set time.
            pStmt.setTimestamp(3,
                               sampleJavaTimestampObject);
            pStmt.executeUpdate();
            pStmt.close();
            con.close();
        }
        catch (Exception ex) {
            System.out.println(ex);
        }
    }
}

Producción:

Una ventaja de tener una marca de tiempo es:

  1. Si queremos obtener la fecha , podemos escribir como seleccionar FECHA (empOrStuLogEntry) de empOrStuInformation1
  2. Si queremos obtener la hora , podemos escribir como seleccione HORA (empOrStuLogEntry) de empOrStuInformation1

java.sql.TIEMPO

crear tabla empOrStuInformation2

(

id int NOT NULL AUTO_INCREMENT CLAVE PRINCIPAL,

empOrStuName varchar(20),

empOrStuDisponibilidad FECHA,

empOrStuLogEntry marca de tiempo,

empOrStuEntryTime hora

 );

Insertar declaración a través de mysql:

INSERTAR EN `test`.`empOrStuInformation2` (`id`, `empOrStuName`, `empOrStuAvailability`, `empOrStuLogEntry`, `empOrStuEntryTime`) VALORES (‘1’, ‘BBBB’, ‘2021-01-01’, ‘2021 -01-01 12:50:00′, ’10:00:00’);

INSERTAR EN `test`.`empOrStuInformation2` (`id`, `empOrStuName`, `empOrStuAvailability`, `empOrStuLogEntry`, `empOrStuEntryTime`) VALORES (‘2’, ‘DDDD’, ‘2021-01-01’, ‘2021 -01-01 14:50:00′, ’10:00:00’);

Producción:

Java

import java.sql.Date;
import java.sql.Time;
import java.sql.Timestamp;
public class GFG {
    public static void main(String[] args)
    {
        String empOrStuAvailableDate = "2021-01-01";
        Date utilAvailabilityDate
            = new SimpleDateFormat("yyyy-MM-dd")
                  .parse(empOrStuAvailableDate);
        // jdbc connectivity expects java.sql.Date
        java.sql.Date sqlAvailabilityDate
            = new java.sql.Date(
                utilAvailabilityDate.getTime());
  
        // create a java timestamp object that represents
        // the current time (i.e., a "current timestamp")
        Calendar calendarInstance = Calendar.getInstance();
        java.sql.Timestamp sampleJavaTimestampObject
            = new java.sql.Timestamp(
                calendarInstance.getTime().getTime());
        try {
            
            Class.forName("com.mysql.jdbc.Driver");
            
            // Here test is the databasename
            // username is root and password is root
            Connection con = DriverManager.getConnection(
                "jdbc:mysql://localhost:3306/test", "root",
                "root");
            
            // Instantiating the Time class
            Time entryTime = new Time(0L);
            
            // Setting time
            entryTime.setTime(
                new java.util.Date().getTime());
            PreparedStatement pStmt = con.prepareStatement(
                "insert into empOrStuInformation2(empOrStuName,empOrStuAvailability,empOrStuLogEntry,empOrStuEntryTime) values(?,?,?,?)");
  
            pStmt.setString(1, "AAAA");
            
            // The setDate() method is used to set date
            pStmt.setDate(2, sqlAvailabilityDate);
            
            // setTimestamp() is used to set timestamp.
            pStmt.setTimestamp(3, sampleJavaTimestampObject);
            
            // setTime() is used to set time.
            pStmt.setTime(4, entryTime);
  
            pStmt.executeUpdate();
            pStmt.close();
            con.close();
        }
        catch (Exception ex) {
            System.out.println(ex);
        }
    }
}

Producción:

Conclusión:

Depende del requisito, las 3 funcionalidades son útiles. Java.sql.Date -> Sirve para registrar la ocurrencia, entrada, salida, etc., sin considerar la hora exacta. Java.sql.Time -> Para mantener el tipo de funcionalidad de alarma independientemente de la fecha, Java.sql.Timestamp-> Para registrar las entradas perfectamente y será de gran ayuda para encontrar la naturaleza de todas y cada una de las entradas que se produjeron en la tabla y, por lo tanto, muy útil en caso de recuperación. Usando las funciones Fecha() y Hora() podemos explícitamente, parte de la fecha y parte de la hora por separado también.

Publicación traducida automáticamente

Artículo escrito por priyarajtt y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *