java.sql.Date
is a class in the Java programming language that represents a date (year, month, and day) and provides functionality for working with dates. It extends the java.util.Date
class and is used primarily for interacting with databases that store date information.
The java.sql.Date
class represents a date in the SQL date format, which has a precision of one day. It does not store time or timezone information, only the year, month, and day. This class provides methods for comparing dates, formatting dates, and converting dates to and from strings.
One thing to note is that java.sql.Date
is not the same as java.util.Date
. While they both represent dates, they have different implementations and functionality. java.sql.Date
is used primarily for database operations, while java.util.Date
is used more generally for date manipulation and formatting.
java.sql.Date Constructor:
The java.sql.Date
class has several constructors that allow you to create a new instance of the class with a specified date value. Here are the constructors:
Date(long date)
– Creates ajava.sql.Date
object that represents the specified number of milliseconds since January 1, 1970, 00:00:00 GMT.Date(int year, int month, int day)
– Creates ajava.sql.Date
object that represents the specified year (minus 1900), month (0-11), and day (1-31).Date(String s)
– Creates ajava.sql.Date
object that represents the date specified by the string argument in the format “yyyy-[m]m-[d]d”, where yyyy is the year, mm is the month (1-12), and dd is the day of the month (1-31).
Note that the Date
class does not support time or timezone information, so the constructors only take parameters for year, month, and day.
Here is an example of using the java.sql.Date
constructors:
// Create a Date object for the current date java.util.Date utilDate = new java.util.Date(); java.sql.Date sqlDate = new java.sql.Date(utilDate.getTime()); // Create a Date object for a specific date java.sql.Date myDate = new java.sql.Date(2023-1900, 4, 7); // Create a Date object from a string java.sql.Date stringDate = java.sql.Date.valueOf("2023-05-07");
In the above example, we create a java.util.Date
object for the current date, and then use its getTime()
method to get the number of milliseconds since January 1, 1970, which is passed to the java.sql.Date
constructor. We also create a java.sql.Date
object for a specific date, and another one by parsing a string in the format “yyyy-[m]m-[d]d”.
java.sql.Date Methods:
The java.sql.Date
class provides several methods that allow you to work with dates. Here are some of the most commonly used methods:
valueOf(String date)
– Creates ajava.sql.Date
object from a string in the format “yyyy-[m]m-[d]d”.toString()
– Returns a string representation of the date in the format “yyyy-[m]m-[d]d”.getTime()
– Returns the number of milliseconds since January 1, 1970, 00:00:00 GMT.compareTo(Date otherDate)
– Compares this date to another date and returns 0 if they are equal, a value less than 0 if this date is before the other date, or a value greater than 0 if this date is after the other date.equals(Object other)
– Returns true if this date is equal to another object, which must be ajava.sql.Date
object.valueOf(LocalDate localDate)
– Creates ajava.sql.Date
object from ajava.time.LocalDate
object.toLocalDate()
– Returns ajava.time.LocalDate
object representing the same date as thisjava.sql.Date
object.
Note that java.sql.Date
is a subclass of java.util.Date
, so it inherits many of its methods as well.
Here is an example of using some of these methods:
// Create a Date object for a specific date java.sql.Date myDate = new java.sql.Date(2023-1900, 4, 7); // Print the date in the format "yyyy-[m]m-[d]d" System.out.println(myDate.toString()); // Create a LocalDate object from the Date object java.time.LocalDate localDate = myDate.toLocalDate(); // Create a new Date object from the LocalDate object java.sql.Date newDate = java.sql.Date.valueOf(localDate); // Compare two dates if (myDate.compareTo(newDate) == 0) { System.out.println("The two dates are equal"); } else if (myDate.compareTo(newDate) < 0) { System.out.println("The first date is before the second date"); } else { System.out.println("The first date is after the second date"); }
In the above example, we create a java.sql.Date
object for a specific date and print it as a string. We then convert it to a java.time.LocalDate
object using the toLocalDate()
method, and then create a new java.sql.Date
object from the LocalDate
object using the valueOf()
method. Finally, we compare the two dates using the compareTo()
method to determine their relative order.
java.sql.Date Example: get current date:
Here’s an example of how to get the current date as a java.sql.Date
object:
java.util.Date utilDate = new java.util.Date(); java.sql.Date sqlDate = new java.sql.Date(utilDate.getTime()); System.out.println("Current date: " + sqlDate.toString());
In the above example, we create a java.util.Date
object for the current date using the no-argument constructor. We then create a new java.sql.Date
object using the getTime()
method of the java.util.Date
object to get the number of milliseconds since January 1, 1970, 00:00:00 GMT, and pass it to the java.sql.Date
constructor. Finally, we print the current date as a string using the toString()
method.
Java String to java.sql.Date Example:
Here’s an example of how to convert a string in the format “yyyy-[m]m-[d]d” to a java.sql.Date
object:
String dateString = "2023-05-07"; java.sql.Date sqlDate = java.sql.Date.valueOf(dateString); System.out.println("Date as a java.sql.Date object: " + sqlDate.toString());
In the above example, we create a string variable dateString
containing the date in the format “yyyy-[m]m-[d]d”. We then convert the string to a java.sql.Date
object using the valueOf()
method, which takes a string in the format “yyyy-[m]m-[d]d” as its argument. Finally, we print the resulting java.sql.Date
object as a string using the toString()
method.
java.sql.Date Example: void setTime()
The java.sql.Date
class is immutable, meaning that once an object is created, its state cannot be changed. Therefore, there is no setTime()
method for java.sql.Date
.
However, if you need to change the time component of a java.sql.Date
object, you can convert it to a java.util.Date
object, modify the time component using setTime()
, and then convert it back to a java.sql.Date
object. Here’s an example:
// Create a Date object for a specific date java.sql.Date myDate = new java.sql.Date(2023-1900, 4, 7); // Convert the Date object to a util.Date object java.util.Date utilDate = new java.util.Date(myDate.getTime()); // Set the time component to 12:00:00 PM utilDate.setTime(utilDate.getTime() + (12 * 60 * 60 * 1000)); // Convert the util.Date object back to a sql.Date object java.sql.Date newDate = new java.sql.Date(utilDate.getTime()); System.out.println("Original date: " + myDate.toString()); System.out.println("New date: " + newDate.toString());
In the above example, we create a java.sql.Date
object for a specific date. We then convert it to a java.util.Date
object using the getTime()
method, modify the time component of the java.util.Date
object using setTime()
, and then convert it back to a java.sql.Date
object using the java.sql.Date
constructor. Finally, we print both the original and modified dates using the toString()
method.
java.sql.Date Example: void toLocalDate()
The java.sql.Date
class does not have a toLocalDate()
method, as it is not part of the class’s API.
However, you can convert a java.sql.Date
object to a java.time.LocalDate
object using the toLocalDate()
method of the java.sql.Date
object’s toInstant()
method. Here’s an example:
// Create a Date object for a specific date java.sql.Date myDate = java.sql.Date.valueOf("2023-05-07"); // Convert the Date object to a LocalDate object java.time.LocalDate localDate = myDate.toInstant().atZone(ZoneId.systemDefault()).toLocalDate(); System.out.println("Date as a LocalDate object: " + localDate.toString());
In the above example, we create a java.sql.Date
object for a specific date. We then convert it to a java.time.LocalDate
object using the toInstant()
method to obtain an Instant
object representing the same point on the time-line as the original java.sql.Date
object, and the atZone()
method to apply the default time-zone of the system to this instant, returning a ZonedDateTime
. Finally, we convert this ZonedDateTime
object to a java.time.LocalDate
object using the toLocalDate()
method. The resulting java.time.LocalDate
object can be used to manipulate dates using the java.time
API.
java.sql.Date Example: void toInstant()
The java.sql.Date
class does not have a toInstant()
method, as it is not part of the class’s API. However, you can convert a java.sql.Date
object to a java.time.Instant
object, which represents an instantaneous point on the time-line, using the toInstant()
method of the java.sql.Date
object. Here’s an example:
// Create a Date object for a specific date java.sql.Date myDate = java.sql.Date.valueOf("2023-05-07"); // Convert the Date object to an Instant object java.time.Instant instant = myDate.toInstant(); System.out.println("Date as an Instant object: " + instant.toString());
In the above example, we create a java.sql.Date
object for a specific date. We then convert it to a java.time.Instant
object using the toInstant()
method. The resulting java.time.Instant
object represents an instantaneous point on the time-line, and can be used to perform arithmetic and comparison operations using the java.time
API. The toString()
method of the Instant
class returns a string representation of the instant in UTC.