Java Tutorial/Database/Date Time Timestamp

Материал из Java эксперт
Перейти к: навигация, поиск

Convert a java.sql.Timestamp Object to a java.util.Date Object?

   <source lang="java">

public static java.util.Date toDate(java.sql.Timestamp timestamp) {

   long milliseconds = timestamp.getTime() + (timestamp.getNanos() / 1000000);
   return new java.util.Date(milliseconds);

}</source>





Convert a String Date Such as 10 to a java.sql.Date Object?

   <source lang="java">

import java.text.ParseException; import java.text.SimpleDateFormat; public class MainClass {

 public static void main(String[] args) throws ParseException {
   try {
     SimpleDateFormat formatter = new SimpleDateFormat("yyyy/MM/dd");
     String date = "2003/01/10";
     java.util.Date utilDate = formatter.parse(date);
     java.sql.Date sqlDate = new java.sql.Date(utilDate.getTime());
     System.out.println("date:" + date);
     System.out.println("sqlDate:" + sqlDate);
   } catch (ParseException e) {
     System.out.println(e.toString());
     e.printStackTrace();
   }
 }

}</source>



date:2003/01/10
sqlDate:2003-01-10


Convert a Timestamp to Month-Day-Year

   <source lang="java">

import java.sql.Timestamp; import java.text.SimpleDateFormat; public class MainClass {

 private static final SimpleDateFormat monthDayYearformatter = new SimpleDateFormat(
     "MMMMM dd, yyyy");
 private static final SimpleDateFormat monthDayformatter = new SimpleDateFormat("MMMMM dd");
 public static String timestampToMonthDayYear(Timestamp timestamp) {
   if (timestamp == null) {
     return null;
   } else {
     return monthDayYearformatter.format((java.util.Date) timestamp);
   }
 }
 public static String timestampToMonthDay(Timestamp timestamp) {
   if (timestamp == null) {
     return null;
   } else {
     return monthDayformatter.format((java.util.Date) timestamp);
   }
 }
 public static java.sql.Timestamp getTimestamp() {
   java.util.Date today = new java.util.Date();
   return new java.sql.Timestamp(today.getTime());
 }

}</source>





Convert into java.sql.Time into java.util.Calendar

   <source lang="java">

import java.sql.Time; import java.util.Calendar; import java.util.Date; import java.util.GregorianCalendar; /**

* Provides methods helpful in making object conversions not provided for by the
* Sun or MyFaces distributions.
* 
* @author 
* 
*/

public class ConversionUtil {

 /**
  * convert into java.sql.Time (or into java.util.Calendar
  * 
  * @param date
  *          The date containing the time.
  * @param am
  *          Whether this should be am (true) or pm (false)
  * @return
  */
 public static Time convertDateToTime(Date date, boolean am) {
   if (date == null) {
     return null;
   }
   Calendar cal = new GregorianCalendar();
   cal.setTime(date);
   int hourOfDay = cal.get(Calendar.HOUR_OF_DAY);
   if (am) {
     // Check to make sure that the hours are indeed am hours
     if (hourOfDay > 11) {
       cal.set(Calendar.HOUR_OF_DAY, hourOfDay - 12);
       date.setTime(cal.getTimeInMillis());
     }
   } else {
     // Check to make sure that the hours are indeed pm hours
     if (cal.get(Calendar.HOUR_OF_DAY) < 11) {
       cal.set(Calendar.HOUR_OF_DAY, hourOfDay + 12);
       date.setTime(cal.getTimeInMillis());
     }
   }
   return new Time(date.getTime());
 }

}</source>





Creating java.sql.Date Using GregorianCalendar

   <source lang="java">

import java.util.Calendar; import java.util.GregorianCalendar; public class MainClass {

 public static void main(String[] args) {
   Calendar calendar = new GregorianCalendar(2000, // year
       10, // month
       1); // day of month
   java.sql.Date date = new java.sql.Date(calendar.getTimeInMillis());
 }

}</source>





Creating java.sql.Date Using java.util.Calendar

   <source lang="java">

import java.util.Calendar; public class MainClass {

 public static void main(String[] args) {
   // get a calendar using the default time zone and locale.
   Calendar calendar = Calendar.getInstance();
   // set Date portion to January 1, 1970
   calendar.set(Calendar.YEAR, 1970);
   calendar.set(Calendar.MONTH, Calendar.JANUARY);
   calendar.set(Calendar.DATE, 1);
   // normalize the object
   calendar.set(Calendar.HOUR_OF_DAY, 0);
   calendar.set(Calendar.MINUTE, 0);
   calendar.set(Calendar.SECOND, 0);
   calendar.set(Calendar.MILLISECOND, 0);
   java.sql.Date javaSqlDate = new java.sql.Date(calendar.getTime().getTime());
 }

}</source>





Creating java.sql.Date Using java.util.Date

   <source lang="java">

public class MainClass {

 public static void main(String[] args) {
   java.util.Date today = new java.util.Date();
   System.out.println(new java.sql.Date(today.getTime()));
 }

}</source>





Creating java.sql.Date Using the java.sql.Date.valueOf() Method

The java.sql.Date object"s valueOf() method accepts a String, which must be the date in JDBC time escape format: YYYY-MM-DD.



   <source lang="java">

public class MainClass {

 public static void main(String[] args) {
   String date = "2000-11-01";
   java.sql.Date javaSqlDate = java.sql.Date.valueOf(date);
 }

}</source>





Get a Date for a Specific Time Zone

   <source lang="java">

import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.Statement; import java.util.Calendar; import java.util.TimeZone; public class Main {

 public static void main(String[] args) throws Exception {
   Connection conn = getConnection();
   Statement st = conn.createStatement();
   st.executeUpdate("create table survey (id int,myDate DATE );");
   String INSERT_RECORD = "insert into survey(id, myDate) values(?, ?)";
   PreparedStatement pstmt = conn.prepareStatement(INSERT_RECORD);
   pstmt.setString(1, "1");
   java.sql.Date sqlDate = new java.sql.Date(new java.util.Date().getTime());
   pstmt.setDate(2, sqlDate);
   pstmt.executeUpdate();
   ResultSet rs = st.executeQuery("SELECT * FROM survey");
   Calendar cal = Calendar.getInstance();
   // get the TimeZone for "America/Los_Angeles"
   TimeZone tz = TimeZone.getTimeZone("America/Los_Angeles");
   cal.setTimeZone(tz);
   while (rs.next()) {
     // the JDBC driver will use the time zone information in
     // Calendar to calculate the date, with the result that
     // the variable dateCreated contains a java.sql.Date object
     // that is accurate for "America/Los_Angeles".
     java.sql.Date dateCreated = rs.getDate(2, cal);
     System.out.println(dateCreated);
   }
   rs.close();
   st.close();
   conn.close();
 }
 private static Connection getConnection() throws Exception {
   Class.forName("org.hsqldb.jdbcDriver");
   String url = "jdbc:hsqldb:mem:data/tutorial";
   return DriverManager.getConnection(url, "sa", "");
 }

}</source>





Get a Date Label from a java.sql.Timestamp Object

   <source lang="java">

import java.sql.Timestamp; public class MainClass {

 private static final long One_Day_In_Milliseconds = 86400000;
 public static final String DATE_LABEL_TODAY = "Today";
 public static final String DATE_LABEL_YESTERDAY = "Yesterday";
 public static final String DATE_LABEL_THIS_MONTH = "This Month";
 public static final String DATE_LABEL_OLDER = "Older";
 public static final String DATE_LABEL_NONE = "";
 public static java.sql.Timestamp getTimestamp() {
   java.util.Date today = new java.util.Date();
   return new java.sql.Timestamp(today.getTime());
 }
 public static String getDateLabel(java.sql.Timestamp ts, java.sql.Timestamp now) {
   long tsTime = ts.getTime();
   long nowTime = now.getTime();
   long quotient = (nowTime - tsTime) / One_Day_In_Milliseconds;
   if (quotient < 1) {
     return DATE_LABEL_TODAY;
   } else if (quotient < 2) {
     return DATE_LABEL_YESTERDAY;
   } else if (quotient < 30) {
     return DATE_LABEL_THIS_MONTH;
   } else {
     return DATE_LABEL_OLDER;
   }
 }
 public static void main(String[] args) {
   java.sql.Timestamp now = getTimestamp();
   java.sql.Timestamp ts1 = getTimestamp();
   System.out.println(getDateLabel(ts1, now));
   System.out.println(ts1.toString());
   System.out.println("-------------");
   // timestamp in format yyyy-mm-dd hh:mm:ss.fffffffff
   java.sql.Timestamp ts22 = java.sql.Timestamp.valueOf("2007-01-06 09:01:10");
   System.out.println(getDateLabel(ts22, now));
   System.out.println(ts22.toString());
   System.out.println("-------------");
   java.sql.Timestamp ts2 = java.sql.Timestamp.valueOf("2007-02-02 10:10:10");
   System.out.println(getDateLabel(ts2, now));
   System.out.println(ts2.toString());
   System.out.println("-------------");
   java.sql.Timestamp ts3 = java.sql.Timestamp.valueOf("2004-07-18 10:10:10");
   System.out.println(getDateLabel(ts3, now));
   System.out.println(ts3.toString());
   System.out.println("-------------");
   java.sql.Timestamp ts4 = java.sql.Timestamp.valueOf("2007-02-01 10:10:10");
   System.out.println(getDateLabel(ts4, now));
   System.out.println(ts4.toString());
   System.out.println("-------------");
 }

}</source>



Today
2007-02-02 13:23:02.933
-------------
This Month
2007-01-06 09:01:10.0
-------------
Today
2007-02-02 10:10:10.0
-------------
Older
2004-07-18 10:10:10.0
-------------
Yesterday
2007-02-01 10:10:10.0
-------------


Get Date value from ResultSet

   <source lang="java">

import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.ResultSetMetaData; import java.sql.Statement; public class Main {

 public static void main(String[] args) throws Exception {
   Connection conn = getConnection();
   Statement st = conn
       .createStatement();
   st.executeUpdate("create table survey (id int,myDate DATE );");
   String INSERT_RECORD = "insert into survey(id, myDate) values(?, ?)";
   
   PreparedStatement pstmt = conn.prepareStatement(INSERT_RECORD);
   pstmt.setString(1, "1");
   java.sql.Date  sqlDate = new java.sql.Date(new java.util.Date().getTime());
   pstmt.setDate(2, sqlDate);
   
   pstmt.executeUpdate();
   
   ResultSet rs = st.executeQuery("SELECT * FROM survey");
   while (rs.next()) {
       System.out.print(rs.getDate(2));
   }
   rs.close();
   st.close();
   conn.close();
 }
 private static Connection getConnection() throws Exception {
   Class.forName("org.hsqldb.jdbcDriver");
   String url = "jdbc:hsqldb:mem:data/tutorial";
   return DriverManager.getConnection(url, "sa", "");
 }

}</source>



2007-02-02


Get the Current Date as a java.util.Date Object

The class java.util.Date represents a specific instant in time, with millisecond precision.



   <source lang="java">

public class MainClass {

 public static void main(String[] args) {
   java.util.Date date = new java.util.Date();
 }

}</source>





Get the Current Timestamp as a java.sql.Time Object?

   <source lang="java">

public class MainClass {

 public static void main(String[] args) {
   java.util.Date today = new java.util.Date();
   System.out.println(new java.sql.Time(today.getTime())); 
 }

}</source>





Get TIMESTAMP value from ResultSet

   <source lang="java">

import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.ResultSetMetaData; import java.sql.Statement; public class Main {

 public static void main(String[] args) throws Exception {
   Connection conn = getConnection();
   Statement st = conn
       .createStatement();
   st.executeUpdate("create table survey (id int,myDate TIMESTAMP );");
   String INSERT_RECORD = "insert into survey(id, myDate) values(?, ?)";
   
   PreparedStatement pstmt = conn.prepareStatement(INSERT_RECORD);
   pstmt.setString(1, "1");
   java.sql.Timestamp  sqlDate = new java.sql.Timestamp(new java.util.Date().getTime());
   pstmt.setTimestamp(2, sqlDate);
   
   pstmt.executeUpdate();
   
   ResultSet rs = st.executeQuery("SELECT * FROM survey");
   while (rs.next()) {
       System.out.print(rs.getTimestamp(2));
   }
   rs.close();
   st.close();
   conn.close();
 }
 private static Connection getConnection() throws Exception {
   Class.forName("org.hsqldb.jdbcDriver");
   String url = "jdbc:hsqldb:mem:data/tutorial";
   return DriverManager.getConnection(url, "sa", "");
 }

}</source>



2007-02-02 12:46:40.632


Get TIME value from ResultSet

   <source lang="java">

import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.ResultSetMetaData; import java.sql.Statement; public class Main {

 public static void main(String[] args) throws Exception {
   Connection conn = getConnection();
   Statement st = conn
       .createStatement();
   st.executeUpdate("create table survey (id int,myDate TIME );");
   String INSERT_RECORD = "insert into survey(id, myDate) values(?, ?)";
   
   PreparedStatement pstmt = conn.prepareStatement(INSERT_RECORD);
   pstmt.setString(1, "1");
   java.sql.Time  sqlDate = new java.sql.Time(new java.util.Date().getTime());
   pstmt.setTime(2, sqlDate);
   
   pstmt.executeUpdate();
   
   ResultSet rs = st.executeQuery("SELECT * FROM survey");
   while (rs.next()) {
       System.out.print(rs.getTime(2));
   }
   rs.close();
   st.close();
   conn.close();
 }
 private static Connection getConnection() throws Exception {
   Class.forName("org.hsqldb.jdbcDriver");
   String url = "jdbc:hsqldb:mem:data/tutorial";
   return DriverManager.getConnection(url, "sa", "");
 }

}</source>



12:47:21


Getting a Timestamp Object Using java.util.Date

   <source lang="java">

public class MainClass {

 public static void main(String[] args) {
   java.util.Date today = new java.util.Date();
   System.out.println(new java.sql.Timestamp(today.getTime()));
 }

}</source>





Getting a Timestamp Object Using System.currentTimeMillis()

   <source lang="java">

public class MainClass {

 public static void main(String[] args) {
   new java.sql.Timestamp(System.currentTimeMillis());
 }

}</source>





Insert Date value

   <source lang="java">

import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.ResultSetMetaData; import java.sql.Statement; public class Main {

 public static void main(String[] args) throws Exception {
   Connection conn = getConnection();
   Statement st = conn
       .createStatement();
   st.executeUpdate("create table survey (id int,myDate DATE);");
   String INSERT_RECORD = "insert into survey(id, myDate) values(?, ?)";
   
   PreparedStatement pstmt = conn.prepareStatement(INSERT_RECORD);
   pstmt.setString(1, "1");
   java.sql.Date sqlDate = new java.sql.Date(new java.util.Date().getTime());
   pstmt.setDate(2, sqlDate);
   
   pstmt.executeUpdate();
   
   ResultSet rs = st.executeQuery("SELECT * FROM survey");
   outputResultSet(rs);
   rs.close();
   st.close();
   conn.close();
 }
 private static void outputResultSet(ResultSet rs) throws Exception {
   ResultSetMetaData rsMetaData = rs.getMetaData();
   int numberOfColumns = rsMetaData.getColumnCount();
   for (int i = 1; i < numberOfColumns + 1; i++) {
     String columnName = rsMetaData.getColumnName(i);
     System.out.print(columnName + "   ");
   }
   System.out.println();
   System.out.println("----------------------");
   while (rs.next()) {
     for (int i = 1; i < numberOfColumns + 1; i++) {
       System.out.print(rs.getString(i) + "   ");
     }
     System.out.println();
   }
 }
 private static Connection getConnection() throws Exception {
   Class.forName("org.hsqldb.jdbcDriver");
   String url = "jdbc:hsqldb:mem:data/tutorial";
   return DriverManager.getConnection(url, "sa", "");
 }

}</source>



ID   MYDATE   
----------------------
1   2007-02-02


Insert TIMESTAMP value

   <source lang="java">

import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.ResultSetMetaData; import java.sql.Statement; public class Main {

 public static void main(String[] args) throws Exception {
   Connection conn = getConnection();
   Statement st = conn
       .createStatement();
   st.executeUpdate("create table survey (id int,myDate TIMESTAMP );");
   String INSERT_RECORD = "insert into survey(id, myDate) values(?, ?)";
   
   PreparedStatement pstmt = conn.prepareStatement(INSERT_RECORD);
   pstmt.setString(1, "1");
   java.sql.Timestamp  sqlDate = new java.sql.Timestamp(new java.util.Date().getTime());
   pstmt.setTimestamp(2, sqlDate);
   
   pstmt.executeUpdate();
   
   ResultSet rs = st.executeQuery("SELECT * FROM survey");
   outputResultSet(rs);
   rs.close();
   st.close();
   conn.close();
 }
 private static void outputResultSet(ResultSet rs) throws Exception {
   ResultSetMetaData rsMetaData = rs.getMetaData();
   int numberOfColumns = rsMetaData.getColumnCount();
   for (int i = 1; i < numberOfColumns + 1; i++) {
     String columnName = rsMetaData.getColumnName(i);
     System.out.print(columnName + "   ");
   }
   System.out.println();
   System.out.println("----------------------");
   while (rs.next()) {
     for (int i = 1; i < numberOfColumns + 1; i++) {
       System.out.print(rs.getString(i) + "   ");
     }
     System.out.println();
   }
 }
 private static Connection getConnection() throws Exception {
   Class.forName("org.hsqldb.jdbcDriver");
   String url = "jdbc:hsqldb:mem:data/tutorial";
   return DriverManager.getConnection(url, "sa", "");
 }

}</source>



ID   MYDATE   
----------------------
1   2007-02-02 12:45:19.914000000


Insert TIME value

   <source lang="java">

import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.ResultSetMetaData; import java.sql.Statement; public class Main {

 public static void main(String[] args) throws Exception {
   Connection conn = getConnection();
   Statement st = conn
       .createStatement();
   st.executeUpdate("create table survey (id int,myDate TIME);");
   String INSERT_RECORD = "insert into survey(id, myDate) values(?, ?)";
   
   PreparedStatement pstmt = conn.prepareStatement(INSERT_RECORD);
   pstmt.setString(1, "1");
   java.sql.Time sqlDate = new java.sql.Time(new java.util.Date().getTime());
   pstmt.setTime(2, sqlDate);
   
   pstmt.executeUpdate();
   
   ResultSet rs = st.executeQuery("SELECT * FROM survey");
   outputResultSet(rs);
   rs.close();
   st.close();
   conn.close();
 }
 private static void outputResultSet(ResultSet rs) throws Exception {
   ResultSetMetaData rsMetaData = rs.getMetaData();
   int numberOfColumns = rsMetaData.getColumnCount();
   for (int i = 1; i < numberOfColumns + 1; i++) {
     String columnName = rsMetaData.getColumnName(i);
     System.out.print(columnName + "   ");
   }
   System.out.println();
   System.out.println("----------------------");
   while (rs.next()) {
     for (int i = 1; i < numberOfColumns + 1; i++) {
       System.out.print(rs.getString(i) + "   ");
     }
     System.out.println();
   }
 }
 private static Connection getConnection() throws Exception {
   Class.forName("org.hsqldb.jdbcDriver");
   String url = "jdbc:hsqldb:mem:data/tutorial";
   return DriverManager.getConnection(url, "sa", "");
 }

}</source>



ID   MYDATE   
----------------------
1   12:44:14


Make a java.sql.Timestamp Object for a Given Year, Month, Day, Hour

   <source lang="java">

import java.sql.Timestamp; import java.util.Calendar; import java.util.GregorianCalendar; public class MainClass {

 public static void main(String[] a) {
   System.out.println(makeTimestamp(2002,02,02,02,02,02,02));
 }
 public static Timestamp makeTimestamp(int year, int month, int day, int hour, int minute,
     int second, int millisecond) {
   Calendar cal = new GregorianCalendar();
   cal.set(Calendar.YEAR, year);
   cal.set(Calendar.MONTH, month - 1);
   cal.set(Calendar.DATE, day);
   cal.set(Calendar.HOUR_OF_DAY, hour);
   cal.set(Calendar.MINUTE, minute);
   cal.set(Calendar.SECOND, second);
   cal.set(Calendar.MILLISECOND, millisecond);
   // now convert GregorianCalendar object to Timestamp object
   return new Timestamp(cal.getTimeInMillis());
 }

}</source>



2002-02-02 02:02:02.002


Returns a java.sql.Timestamp equal to the current time

   <source lang="java">

public class Utils {

 /**
  * Returns a java.sql.Timestamp equal to the current time
  **/
 public static java.sql.Timestamp now() {
     return new java.sql.Timestamp(new java.util.Date().getTime());
 }

}</source>





Working with Date, Time, and Timestamp in JDBC

The java.sql package provides the following classes that deal with date-related data types:

  1. java.sql.Date: Mapping for SQL DATE.
  2. java.sql.Time: Mapping for SQL TIME.
  3. java.sql.Timestamp: Mapping for SQL TIMESTAMP.