类 java.sql.Timestamp

本文详细介绍了Java中的Timestamp类,包括其继承关系、构造方法及常用API。Timestamp类是Date的子类,专门用于处理SQL TIMESTAMP类型的值,支持毫秒级精度的操作。

类 java.sql.Timestamp

java.lang.Object
   |
   +----java.util.Date
           |
           +----java.sql.Timestamp

public class Timestamp extends Date

该类是 java.util.Date 瘦包装器,它允许 JDBC 把该类作为 SQL TIMESTAMP 值识别。 它添加了用以维持 SQL TIMESTAMP 纳秒值的能力并提供格式化和分析操作以支持用于 timestamp 值的 JDBC 换码语法。

注意: 该类型是 java.util.Date 和分离的毫微秒值的组合。仅完整的秒数存到 java.util.Date 组件中。分数秒数 - 毫微秒 - 是分离的。 getTime 方法仅返回完整的秒数。如果需要包含分数秒数的时间值就必须把毫微秒转换成毫秒(毫微秒 /1000000),并把它添加到 getTime 值上。注意,hashcode() 方法使用基本的 java.util.Data 来实现,因此在它的计算中不包括毫微秒。

 


构造子索引
Timestamp(int, int, int, int, int, int, int)
构造一个 Timestamp 对象
Timestamp(long)
构造一个使用毫秒时间值的 Timestamp 。

方法索引
after(Timestamp)
该时间标记晚于时间标记参数吗?
before(Timestamp)
该时间标记早于时间标记参数吗?
equals(Timestamp)
测试 Timestamp 值是否相等
getNanos()
获取 Timestamp 的毫微秒值
setNanos(int)
设置 Timestamp 的毫微秒值
toString()
以 JDBC timestamp 换码格式来格式化一个时间标记
valueOf(String)
把 JDBC timestamp 换码格式的字符串转换成一个 Timestamp 值

构造子
Timestamp
 public Timestamp(int year,
             int month,
             int date,
                       int hour,
                       int minute,
                  int second,
                  int nano)
构造一个 Timestamp 对象

 

参数:
year - 年-1900
month - 0 到 11
day - 1 到 31
hour - 0 到 23
minute - 0 到 59
second - 0 到 59
nano - 0 到 999,999,999
Timestamp
 public Timestamp(long time)
构造一个使用毫秒时间值的 Timestamp 。 整数秒存储到基本的日期值中;分数的秒被存到毫微秒值中。

 

参数:
time - 自 GMT 1970年1月1日 00:00:00 起的毫秒数

方法
valueOf
 public static Timestamp valueOf(String s)
把 JDBC timestamp 换码格式的字符串转换成一个 Timestamp 值

 

参数:
s - "yyyy-mm-dd hh:mm:ss.fffffffff" 格式的时间标记
返回值:
相应的 Timestamp
toString
 public String toString()
以 JDBC timestamp 换码格式来格式化一个时间标记

 

返回值:
yyyy-mm-dd hh:mm:ss.fffffffff 格式的字符串
覆盖:
Date 中的 toString
getNanos
 public int getNanos()
获取 Timestamp 的毫微秒值

 

返回值:
Timestamp 的分数秒部分
setNanos
 public void setNanos(int n)
设置 Timestamp 的毫微秒值

 

参数:
n - 新的分数秒部分
equals
 public boolean equals(Timestamp ts)
测试 Timestamp 值是否相等

 

参数:
ts - 与该 Timestamp 值相比较的 Timestamp 值
before
 public boolean before(Timestamp ts)
该时间标记早于时间标记参数吗?

 

参数:
ts - 与 Timestamp 值相比较的值
after
 public boolean after(Timestamp ts)
该时间标记晚于时间标记参数吗?

 

参数:
ts - 与该 Timestamp 值相比较的 Timestamp 值

MySQL中尽量使用datetime,而不要使用timestamp

粗看起来,在MySQL中timestamp和datetime都能保存年、月、日、时、分、秒,只是timestamp可以保存1秒以下的时间。
但不仅仅是这样, timestamp是有限制范围的,从1970年1月2日到203几年。虽然这个限制看起来无所谓,因为一般用不到。但是, 如果一旦有超过此范围的值insert或者update,MySQL并不会报错,并把一个年月日时分秒都是0的值放到表中。这一点在mysql文档中是有的,但是很可能未被注意到。
由于MySQL不报错,因此应用程序并不知道。当再把此值查出来的时候, 就导致应用程序出现意想不到的错误。
因此,除非必须,否则在MySQL中尽量使用datetime,不用timestamp
`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、付费专栏及课程。

余额充值