java.sql.Timestamp(时间戳)

本文详细介绍了Java中的Timestamp类,包括其构造方法、如何从String和Date转换而来,以及常见的时间处理方法。Timestamp支持小数秒到纳秒级别的精度,并提供与数据库交互时的日期处理能力。

[Java]java.sql.Timestamp(时间戳)

原创  2017年05月06日 14:59:31

java.sql.Timestamp(时间戳)

继承父类:java.util.Date

所有已实现的接口:Serializable, Cloneable, Comparable<Date> 

主要构造方法:Timestamp(long millis) 使用毫秒时间值构造 Timestamp 对象。

Timestamp允许 JDBC API 将该类标识为 SQL TIMESTAMP 值。它通过允许小数秒到纳秒级精度的规范来添加保存 SQLTIMESTAMP 小数秒值的能力。

Timestamp 也提供支持时间戳值的 JDBC 转义语法的格式化和解析操作的能力,主要用于写一些与数据库连接时的日期处理。

例如:

在 ResultSet中我们经常使用的setDate或getDate的数据类型是java.sql.Date,而在平时java程序中我们一般习惯使用 java.util.Date。

但是java.sql.Date 只存储日期数据不存储时间数据 ,这种符合规范的类型其实并没有把时分秒存进数据库,所以存取时就应该用Timestamp的setTimestamp()和

getTimestamp()。

整理一: String --> Timestamp: 

Timestamp转换为String可以直接.toString(),但有时候显示时是不需要小数位后面的毫秒值,需要借助DateFormat在转换为String时重新定义格式。

使用Timestamp的valueOf()方法, 

[java]  view plain  copy
  1. Timestamp time= new Timestamp(System.currentTimeMillis());//获取系统当前时间   
  2. SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");  
  3. String timeStr = df.format(time);   
  4. time = Timestamp.valueOf(timeStr);   
  5. System.out.println(time);//2017-05-06 15:54:21.0   

整理二: java.util.Date --> Timestamp

方式1: 使用Timestamp的构造方法

[java]  view plain  copy
  1. Date date = new Date();  
  2. Timestamp ts = new Timestamp(date.getTime());  

方式2:

注意:父类不能直接向子类转化,需要借助中间的String,并且format的格式要与Timestamp的字符串类型格式相匹配

java.lang.IllegalArgumentException: Timestamp format must be yyyy-mm-dd hh:mm:ss[.fffffffff]

[java]  view plain  copy
  1. Date date = new Date();    
  2. DateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");    
  3. String dateStr = sdf.format(date);  
  4. Timestamp ts = Timestamp.valueOf(dateStr); //2017-05-06 15:54:21.0   

整理三:

通过构造方法创建Timestamp 对象,获取毫秒值有下面三种方法:

方法1:

System.currentTimeMillis(); 

方法2:

Calendar.getInstance().getTimeInMillis(); 

方法3: 

new Date().getTime();

测试证明:System.currentTimeMillis() 这种方式速度最快

Calendar.getInstance().getTimeInMillis() 这种方式速度最慢,因为Canlendar因为要处理时区问题会耗费很多的时间。

所以建议多使用第一种方式。

 

方法摘要 
 boolean after(Timestamp ts) 
          指示此 Timestamp 对象是否晚于给定的 Timestamp 对象。 
 boolean before(Timestamp ts) 
          指示此 Timestamp 对象是否早于给定的 Timestamp 对象。 
 int compareTo(Date o) 
          将此 Timestamp 对象与给定的 Date(必须为 Timestamp 对象)相比较。 
 int compareTo(Timestamp ts) 
          将此 Timestamp 对象与给定 Timestamp 对象相比较。 
 boolean equals(Object ts) 
          测试此对象是否等于给定的 Timestamp 对象。 
 boolean equals(Timestamp ts) 
          测试此 Timestamp 对象是否等于给定的 Timestamp 对象。 
 int getNanos() 
          获取此 Timestamp 对象的 nanos 值。 
 long getTime() 
          返回此 Timestamp 对象表示的自 1970 年 1 月 1 日 00:00:00 GMT 以来的毫秒数。 
 void setNanos(int n) 
          将此 Timestamp 对象的 nanos 字段设置为给定值。 
 void setTime(long time) 
          设置此 Timestamp 对象,以表示 1970 年 1 月 1 日 00:00:00 GMT 以后 time 毫秒的时间点。 
 String toString() 
          使用 JDBC 时间戳转义格式编排时间戳。 
static Timestamp valueOf(String s) 
          将使用 JDBC 时间戳转义格式的 String 对象转换为 Timestamp 值。 

实例代码:

[java]  view plain  copy
  1. tLotteryAnnouncement.setDateTime(new Timestamp(System.currentTimeMillis()));  
  2. if(StringUtils.isNotBlank(tIsusesKj.getOpenTime())){  
  3.     tLotteryAnnouncement.setOpenTime(Timestamp.valueOf(tIsusesKj.getOpenTime()));  
  4. }else{  
  5.     tLotteryAnnouncement.setOpenTime(new Timestamp(tIsusesKj.getModifyDate().getTime()));  
  6. }  


版权声明:本文为博主原创文章,未经博主允许不得转载。 举报
`java.sql.Timestamp` 类是 `java.util.Date` 的一个子类,它带有纳秒级精度,通常用于与数据库中的时间戳字段进行交互。以下是一些常见的使用方法: ### 1. 创建 `Timestamp` 对象 可以使用构造函数或 `valueOf` 方法来创建 `Timestamp` 对象。 ```java import java.sql.Timestamp; import java.util.Date; public class TimestampExample { public static void main(String[] args) { // 使用当前时间创建 Timestamp 对象 Timestamp timestamp1 = new Timestamp(System.currentTimeMillis()); System.out.println("使用当前时间创建的 Timestamp: " + timestamp1); // 使用 Date 对象创建 Timestamp 对象 Date date = new Date(); Timestamp timestamp2 = new Timestamp(date.getTime()); System.out.println("使用 Date 对象创建的 Timestamp: " + timestamp2); // 使用字符串创建 Timestamp 对象 Timestamp timestamp3 = Timestamp.valueOf("2024-01-01 12:00:00"); System.out.println("使用字符串创建的 Timestamp: " + timestamp3); } } ``` ### 2. 获取和设置纳秒 `Timestamp` 类提供了获取和设置纳秒的方法。 ```java import java.sql.Timestamp; public class TimestampNanosExample { public static void main(String[] args) { Timestamp timestamp = new Timestamp(System.currentTimeMillis()); // 获取纳秒 int nanos = timestamp.getNanos(); System.out.println("当前 Timestamp 的纳秒部分: " + nanos); // 设置纳秒 timestamp.setNanos(500000000); System.out.println("设置纳秒后的 Timestamp: " + timestamp); } } ``` ### 3. 与 `java.util.Date` 相互转换 `Timestamp` 是 `Date` 的子类,可以直接转换为 `Date` 对象;也可以从 `Date` 对象创建 `Timestamp` 对象。 ```java import java.sql.Timestamp; import java.util.Date; public class TimestampDateConversion { public static void main(String[] args) { // Timestamp 转换为 Date Timestamp timestamp = new Timestamp(System.currentTimeMillis()); Date date = timestamp; System.out.println("Timestamp 转换为 Date: " + date); // Date 转换为 Timestamp Date newDate = new Date(); Timestamp newTimestamp = new Timestamp(newDate.getTime()); System.out.println("Date 转换为 Timestamp: " + newTimestamp); } } ``` ### 4. 格式化输出 可以使用 `SimpleDateFormat` 或 `DateTimeFormatter` 来格式化 `Timestamp` 对象。 ```java import java.sql.Timestamp; import java.text.SimpleDateFormat; public class TimestampFormatting { public static void main(String[] args) { Timestamp timestamp = new Timestamp(System.currentTimeMillis()); SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); String formattedTimestamp = sdf.format(timestamp); System.out.println("格式化后的 Timestamp: " + formattedTimestamp); } } ``` ### 5. 与数据库交互 在 JDBC 中,`Timestamp` 通常用于处理数据库中的时间戳字段。 ```java import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Timestamp; public class TimestampDatabaseInteraction { public static void main(String[] args) { String url = "jdbc:mysql://localhost:3306/testdb"; String user = "root"; String password = "password"; try (Connection conn = DriverManager.getConnection(url, user, password)) { // 插入 Timestamp 数据 String insertQuery = "INSERT INTO timestamps (timestamp_column) VALUES (?)"; try (PreparedStatement pstmt = conn.prepareStatement(insertQuery)) { Timestamp timestamp = new Timestamp(System.currentTimeMillis()); pstmt.setTimestamp(1, timestamp); pstmt.executeUpdate(); } // 查询 Timestamp 数据 String selectQuery = "SELECT timestamp_column FROM timestamps"; try (PreparedStatement pstmt = conn.prepareStatement(selectQuery); ResultSet rs = pstmt.executeQuery()) { while (rs.next()) { Timestamp retrievedTimestamp = rs.getTimestamp("timestamp_column"); System.out.println("从数据库中查询到的 Timestamp: " + retrievedTimestamp); } } } catch (SQLException e) { e.printStackTrace(); } } } ``` ### 注意事项 - `java.sql.Timestamp` 是早期 Java 日期时间框架的一部分,存在一些设计上的问题,现在更推荐使用 `java.time` 包中的类,如 `LocalDateTime`、`ZonedDateTime` 等。 - 在进行类型转换时,要注意 `Timestamp` 和其他日期时间类的差异,避免出现 `ClassCastException` 异常 [^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值