Timestamp Java Example
In this article we will create a Timestamp Java Example and Timestamp sql.
1. Introduction
In a typical application, there are a lot of events like orders receipt, payment request sent, users logging in, orders shipping to name a few. The events may also be negative such as network failure, invalid user login, product failure so on.
To answer questions around such events like “When did you receive your order?”, “How long did you take to process an order?”, “When was the ordered product shipped?”, “When there was a network failure?”, the timestamps are helpful to a great extent. As the word suggests timestamp is the stamp of a time when the event occurred.
In Java, usually, we record a timestamp based on Java epoch. Java epoch as per Javadoc is a long number representing the exact seconds elapsed from the standard Java epoch of 1970-01-01T00:00:00Z (January 1st, 1970 00:00 GMT).
In this article we give examples about two timestamp classes in Java including their constructors and methods and the classes discussed are java.sql.Timestamp
and java.time.Instant
.
2. Timestamp classes in Java
2.1 java.sql.Timestamp
As per Javadoc, Timestamp
is a wrapper around Java Date which allows JDBC API to recognize this as an SQL TIMESTAMP. Additionally, this allows for nanoseconds to be represented as a fraction of a second.
Functionally, this used to time the database events such as creation of new records and update, removal of existing records, etc., Further, it is also used to compare two database events based on timestamp, say did the database event A occur after/before the database event B.
The following example creates two Timestamp
objects and compares the two objects:
Example 1
public void funWithJavaSQLTimestamp() { System.out.println("\nTimestamps"); System.out.println("=========="); // Create start date timestamp object Timestamp startTimestamp = new Timestamp(System.currentTimeMillis()); // Print current timestamp System.out.println("Start Timestamp is : " + startTimestamp.toString()); // Introduce some delay System.out.println("Introducing some random delay!"); int randomNumber = new Random().nextInt(10); try { Thread.sleep(randomNumber * 1000); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } // Create end date time stamp Timestamp endTimeStamp = new Timestamp(System.currentTimeMillis()); System.out.println("End Date is : " + endTimeStamp.toString()); System.out.println("\nTimestamp Comparisons"); System.out.println("====================="); // Check start date is after/before start date System.out.println("Is Start Date after the End Date? " + (startTimestamp.after(endTimeStamp)? "Yes" : "No")); System.out.println("Is Start Date before the End Date? " + (startTimestamp.before(endTimeStamp)? "Yes" : "No")); // Alternative method of comparing timestamps int comparison = startTimestamp.compareTo(endTimeStamp); System.out.println("The comparison between startDate and endDate: " + comparison); System.out.println("\tHere 0 means equal\n\t-1 means start date is less than " + "end date\n\t+1 means start date is greater than end date."); }
This following shows how to set Timestamp
in a PreparedStatement
object while creating a new database record. The example assumes the database table structure as shown in the picture:
Example 2
public PreparedStatement generatePreparedStatement(Connection con, long id, String productName, int quantity, double rate) throws SQLException { String query = "INSERT INTO PRODUCT_ORDER " + "(ID, PRODUCT_NAME, QUANTITY, RATE, CREATED_TIME) " + " VALUES (?, ?, ?, ?, ?)"; PreparedStatement statement = con.prepareStatement(query); statement.setLong(1, id); statement.setString(2, productName); statement.setInt(3, quantity); statement.setDouble(4, rate); // Example to show how to set timestamp // while creating a new record Timestamp ts = new Timestamp(System.currentTimeMillis()); statement.setTimestamp(5, ts); return statement; }
2.2 java.time.Instant
Instant
class, as per Javadocs, is also used to record the timestamps for the events in the application.
Unlike Timestamp
this is not specially designed for SQL queries. This is for general usage. Similar to Timestamp
, Instant
also provides methods for comparison like isAfter
and isBefore
. Check javadocs for more information.
Along with the comparison methods, it also provides time calculation methods to add/subtract time in seconds, time in millis, and time in nanos.
The example for the Instant
class follows:
public void funWithInstant() { // Creating the timestamps using Instant System.out.println("\nInstants"); System.out.println("========="); Instant startInstant = Instant.now(); System.out.println("Start Instant time : " + startInstant); Instant endInstant = Instant.now(); System.out.println("End Instant time : " + endInstant); // Instant comparisons System.out.println("\nInstant Comparisons"); System.out.println("==================="); // Check start date is after/before start date System.out.println("Is Start Date after End Date? " + (startInstant.isAfter(endInstant)? "Yes" : "No")); System.out.println("Is Start Date before End Date? " + (startInstant.isBefore(endInstant)? "Yes" : "No")); // Instant calculations System.out.println("\nInstant Calculations"); System.out.println("===================="); System.out.println("Adding 2 seconds to the start instant. " + "Result is : " + startInstant.plusSeconds(3)); System.out.println("Adding 200 millis to the start instant. " + "Result is : " + startInstant.plusMillis(200)); System.out.println("Adding 500 nanos to the start instant. " + "Result is : " + startInstant.plusNanos(500)); }
3. Execution
In this section we will execute the programs and see how it is working.
Prerequisites:
- Java 1.8 installed in the system. Environment variables
JAVA_HOME
set to the Java location andPATH
set to the directory containing javac and java binaries (%JAVA_HOME%/bin
on windows or$JAVA_HOME/bin
on Linux machines) - Source code zip and downloaded to a location (say,
C:\JavaCodeGeeks
. This would be different for Linux) - Eclipse IDE (Photon Release (4.8.0) is used for this example)
3.1 Execution using eclipse
Step 1: Open the Eclipse IDE.
Step 2: Click On File >> Import.
Step 3: From the “Import” menu select “Existing Projects into Workspace”.
Step 4: Click Next.
Step 5: On the next page, click browse and select the root of the example folder (say,C:\JavaCodeGeeks
). Click on the “Finish” button.
Step 6: Ensure Package Explorer is loaded and lists all the files as shown in the figure below.
Step 7: Click on src >> com.javacodegeeks.examples >> TimestampExample
Step 8: Right-click on TimestampExample.java
, from the menu, choose
“Run As” >> “Java Application”
See the sample output as below:
Timestamps ========== Start Timestamp is : 2020-05-17 10:59:29.465 Introducing some random delay! End Date is : 2020-05-17 10:59:32.485 Timestamp Comparisons ===================== Is Start Date after the End Date? No Is Start Date before the End Date? Yes The comparison between startDate and endDate: -1 Here 0 means equal -1 means start date is less than end date +1 means start date is greater than end date. Instants ========= Start Instant time : 2020-05-17T09:59:32.487Z End Instant time : 2020-05-17T09:59:32.568Z Instant Comparisons =================== Is Start Date after End Date? No Is Start Date before End Date? Yes Instant Calculations ==================== Adding 2 seconds to the start instant. Result is : 2020-05-17T09:59:35.487Z Adding 200 millis to the start instant. Result is : 2020-05-17T09:59:32.687Z Adding 500 nanos to the start instant. Result is : 2020-05-17T09:59:32.487000500Z
4. Download the Eclipse Project
That is a tutorial about the timestamps in Java.
You can download the full source code of this example here: Timestamp Java Example
Nice