在java学习代码中,往往在时间的获取、判断、存储中出现一些问题。例如如何获取时间、如何修改时间、如何进行时间判断,我们常常在这上面犯难。
-
Java提供了以下几种方法来获取当前时间、存储时间、从数据库中获取时间和时间戳:
需要注意的是,Java 8之后引入了新的日期和时间API(
java.time
包),推荐使用这些新的API来处理日期和时间,而不是使用旧的java.util.Date
和java.sql
包中的类。新的API提供了更好的可读性、线程安全性和易用性。-
获取当前时间:
-
使用
java.util.Date
类的new Date()
方法可以获取当前系统时间的Date对象。 -
使用
java.time.LocalDateTime
类的now()
方法可以获取当前系统时间的LocalDateTime对象。 -
使用
java.time.LocalTime
类的now()
方法可以获取当前系统时间的LocalTime对象。 -
使用
System.currentTimeMillis()
方法可以获取当前系统时间的毫秒数。
-
-
存储时间:
-
使用
java.util.Date
类的构造方法可以将指定的日期和时间存储为Date对象。 -
使用
java.time.LocalDateTime
类的of()
方法可以将指定的日期和时间存储为LocalDateTime对象。 -
使用
java.time.LocalTime
类的of()
方法可以将指定的时间存储为LocalTime对象。
-
-
从数据库中获取时间:
-
使用
java.sql.ResultSet
类的getTimestamp()
方法可以从数据库中获取时间戳,并将其转换为Java的java.sql.Timestamp
对象。 -
使用
java.sql.ResultSet
类的getTime()
方法可以从数据库中获取时间,并将其转换为Java的java.sql.Time
对象。 -
使用
java.sql.ResultSet
类的getDate()
方法可以从数据库中获取日期,并将其转换为Java的java.sql.Date
对象。
-
-
时间戳:
-
使用
java.util.Date
类的getTime()
方法可以将Date对象转换为时间戳(毫秒数)。 -
使用
java.time.Instant
类的now()
方法可以获取当前系统时间的时间戳。 -
使用
java.sql.Timestamp
类的getTime()
方法可以将Timestamp对象转换为时间戳(毫秒数)。
-
-
一、java.util.Date类
以下是关于java.util.Date类的详细方法:
-
构造方法:
-
Date()
:创建一个表示当前系统时间的Date
对象。 -
Date(long date)
:根据给定的毫秒数创建一个Date
对象。
-
-
常用方法:
-
getTime()
:返回自1970年1月1日00:00:00 GMT以来的毫秒数。 -
setTime(long time)
:设置Date
对象的时间为给定的毫秒数。 -
before(Date when)
:检查当前日期是否在给定日期之前。 -
after(Date when)
:检查当前日期是否在给定日期之后。 -
equals(Object obj)
:比较两个Date
对象是否相等。 -
toString()
:将Date
对象转换为字符串表示。
-
-
Deprecated方法:
-
getYear()
:返回自1900年起的年份,已被getYear()
方法取代。 -
setYear(int year)
:设置年份,已被setYear(int year)
方法取代。 -
getMonth()
:返回月份,范围为0-11,已被getMonth()
方法取代。 -
setMonth(int month)
:设置月份,范围为0-11,已被setMonth(int month)
方法取代。 -
getDate()
:返回一个月中的日期,已被getDate()
方法取代。 -
setDate(int date)
:设置一个月中的日期,已被setDate(int date)
方法取代。 -
getDay()
:返回星期几,范围为0-6,已被getDay()
方法取代。 -
setDay(int day)
:设置星期几,范围为0-6,已被setDay(int day)
方法取代。
-
二、java.time.LocalTime
类
java.time.LocalTime
类是Java 8及以后版本中的日期时间类,用于表示时间。它提供了以下主要内容:
java.time.LocalTime
类还提供了其他一些方法,用于处理时间的解析、格式化、调整等操作。它是线程安全的,可以在多线程环境下使用。
需要注意的是,java.time.LocalTime
类表示的是时间,不包含日期和时区信息。如果需要同时表示日期和时间,可以使用java.time.LocalDateTime
类。如果需要考虑时区,可以使用java.time.ZonedDateTime
类。
-
构造方法:
-
LocalTime.now()
:创建一个表示当前系统时间的LocalTime
对象。 -
LocalTime.of(int hour, int minute)
:根据给定的小时和分钟创建一个LocalTime
对象。 -
LocalTime.of(int hour, int minute, int second)
:根据给定的小时、分钟和秒创建一个LocalTime
对象。 -
LocalTime.of(int hour, int minute, int second, int nanoOfSecond)
:根据给定的小时、分钟、秒和纳秒创建一个LocalTime
对象。
-
-
常用方法:
-
getHour()
:返回小时数,范围为0-23。 -
getMinute()
:返回分钟数,范围为0-59。 -
getSecond()
:返回秒数,范围为0-59。 -
getNano()
:返回纳秒数,范围为0-999,999,999。 -
plusHours(long hours)
:增加指定的小时数。 -
plusMinutes(long minutes)
:增加指定的分钟数。 -
plusSeconds(long seconds)
:增加指定的秒数。 -
plusNanos(long nanos)
:增加指定的纳秒数。 -
minusHours(long hours)
:减去指定的小时数。 -
minusMinutes(long minutes)
:减去指定的分钟数。 -
minusSeconds(long seconds)
:减去指定的秒数。 -
minusNanos(long nanos)
:减去指定的纳秒数。 -
isBefore(LocalTime other)
:检查当前时间是否在给定时间之前。 -
isAfter(LocalTime other)
:检查当前时间是否在给定时间之后。 -
equals(Object obj)
:比较两个LocalTime
对象是否相等。 -
toString()
:将LocalTime
对象转换为字符串表示。
-
三、java.time.LocalDateTime
类
java.time.LocalDateTime
类是Java 8及以后版本中的日期时间类,用于表示日期和时间,不考虑时区。它提供了以下主要内容:
java.time.LocalDateTime
类还提供了其他一些方法,用于处理日期时间的解析、格式化、调整等操作。它是线程安全的,可以在多线程环境下使用。
需要注意的是,java.time.LocalDateTime
类表示的是本地日期和时间,不考虑时区。如果需要考虑时区,可以使用java.time.ZonedDateTime
类。
-
构造方法:
-
LocalDateTime.now()
:创建一个表示当前系统日期和时间的LocalDateTime
对象。 -
LocalDateTime.of(int year, int month, int dayOfMonth, int hour, int minute)
:根据给定的年、月、日、小时和分钟创建一个LocalDateTime
对象。 -
LocalDateTime.of(int year, int month, int dayOfMonth, int hour, int minute, int second)
:根据给定的年、月、日、小时、分钟和秒创建一个LocalDateTime
对象。 -
LocalDateTime.of(int year, int month, int dayOfMonth, int hour, int minute, int second, int nanoOfSecond)
:根据给定的年、月、日、小时、分钟、秒和纳秒创建一个LocalDateTime
对象。
-
-
常用方法:
-
getYear()
:返回年份。 -
getMonth()
:返回月份,枚举类型Month
。 -
getDayOfMonth()
:返回一个月中的日期。 -
getHour()
:返回小时数,范围为0-23。 -
getMinute()
:返回分钟数,范围为0-59。 -
getSecond()
:返回秒数,范围为0-59。 -
getNano()
:返回纳秒数,范围为0-999,999,999。 -
plusYears(long years)
:增加指定的年数。 -
plusMonths(long months)
:增加指定的月数。 -
plusDays(long days)
:增加指定的天数。 -
plusHours(long hours)
:增加指定的小时数。 -
plusMinutes(long minutes)
:增加指定的分钟数。 -
plusSeconds(long seconds)
:增加指定的秒数。 -
plusNanos(long nanos)
:增加指定的纳秒数。 -
minusYears(long years)
:减去指定的年数。 -
minusMonths(long months)
:减去指定的月数。 -
minusDays(long days)
:减去指定的天数。 -
minusHours(long hours)
:减去指定的小时数。 -
minusMinutes(long minutes)
:减去指定的分钟数。 -
minusSeconds(long seconds)
:减去指定的秒数。 -
minusNanos(long nanos)
:减去指定的纳秒数。 -
isBefore(LocalDateTime other)
:检查当前日期时间是否在给定日期时间之前。 -
isAfter(LocalDateTime other)
:检查当前日期时间是否在给定日期时间之后。 -
equals(Object obj)
:比较两个LocalDateTime
对象是否相等。 -
toString()
:将LocalDateTime
对象转换为字符串表示。
-
四、System.currentTimeMillis()
System.currentTimeMillis()
是Java中的一个静态方法,用于获取当前系统时间的毫秒数。它返回一个long
类型的值,表示自1970年1月1日00:00:00 GMT以来的毫秒数。
该方法通常用于计算时间间隔、性能测试和生成时间戳等场景。可以通过调用System.currentTimeMillis()
方法获取当前时间的毫秒数,并进行相应的计算或处理。
示例用法:
long currentTimeMillis = System.currentTimeMillis();
System.out.println("当前时间的毫秒数:" + currentTimeMillis);
输出:
当前时间的毫秒数:1631234567890
需要注意的是,System.currentTimeMillis()
返回的是系统时钟的时间,可能受到系统时钟的调整或同步的影响。如果需要更精确的时间,可以使用java.time
包中的日期时间类,如java.time.Instant
或java.time.LocalDateTime
。
关于resultSet中引用了一些关于时间的方法,详介以下其内容:
java.sql.ResultSet
类是Java中用于表示数据库查询结果集的接口。它提供了访问和处理查询结果的方法。以下是java.sql.ResultSet
类的主要内容:
需要注意的是,java.sql.ResultSet
是一个只读的结果集,只能用于获取查询结果,不能对数据库进行修改。如果需要对数据库进行修改操作,需要使用java.sql.Statement
或java.sql.PreparedStatement
接口。
另外,为了确保资源的正确释放,使用完ResultSet
后应及时调用close()
方法关闭结果集。
-
导航方法:
-
next()
:将光标移动到结果集的下一行。 -
previous()
:将光标移动到结果集的上一行。 -
first()
:将光标移动到结果集的第一行。 -
last()
:将光标移动到结果集的最后一行。 -
absolute(int row)
:将光标移动到指定行。 -
relative(int rows)
:将光标相对于当前位置移动指定行数。
-
-
获取数据方法:
-
getInt(int columnIndex)
:获取指定列的整数值。 -
getString(int columnIndex)
:获取指定列的字符串值。 -
getDouble(int columnIndex)
:获取指定列的双精度浮点数值。 -
getDate(int columnIndex)
:获取指定列的日期值。 -
getTime(int columnIndex)
:获取指定列的时间值。 -
getObject(int columnIndex)
:获取指定列的通用对象值。
-
-
列索引和列名的映射方法:
-
findColumn(String columnName)
:根据列名获取列的索引。 -
getColumnLabel(int columnIndex)
:获取指定列的标签(列名)。
-
-
结果集元数据方法:
-
getMetaData()
:获取结果集的元数据,返回java.sql.ResultSetMetaData
对象,用于获取关于结果集的列信息。
-
-
关闭方法:
-
close()
:关闭结果集,释放相关资源。
-
五、java.time.Instant
类和java.sql.Timestamp
类
java.time.Instant
类和java.sql.Timestamp
类都是Java中用于表示时间戳的类,但它们存在一些区别。
java.time.Instant
类是Java 8及以后版本中的日期时间类,用于表示时间戳。它是基于UTC(协调世界时)的,精确到纳秒级别。Instant
类提供了以下主要内容:
java.sql.Timestamp
类是Java中用于表示SQL TIMESTAMP类型的类。它继承自java.util.Date
类,但提供了更高的精度,精确到纳秒级别。Timestamp
类提供了以下主要内容:
需要注意的是,java.sql.Timestamp
类主要用于与数据库交互,可以在PreparedStatement
和ResultSet
中使用。而java.time.Instant
类是Java 8及以后版本中的日期时间类,更适用于通用的日期时间操作。如果需要在Java中处理时间戳,推荐使用java.time.Instant
类。
-
构造方法:
-
Instant.now()
:创建一个表示当前系统时间的Instant
对象。 -
Instant.ofEpochMilli(long epochMilli)
:根据给定的毫秒数创建一个Instant
对象。 -
Instant.ofEpochSecond(long epochSecond)
:根据给定的秒数创建一个Instant
对象。
-
-
常用方法:
-
getEpochSecond()
:返回自1970年1月1日00:00:00 GMT以来的秒数。 -
getNano()
:返回纳秒数,范围为0-999,999,999。 -
plusSeconds(long seconds)
:增加指定的秒数。 -
plusMillis(long millis)
:增加指定的毫秒数。 -
plusNanos(long nanos)
:增加指定的纳秒数。 -
minusSeconds(long seconds)
:减去指定的秒数。 -
minusMillis(long millis)
:减去指定的毫秒数。 -
minusNanos(long nanos)
:减去指定的纳秒数。 -
isBefore(Instant other)
:检查当前时间戳是否在给定时间戳之前。 -
isAfter(Instant other)
:检查当前时间戳是否在给定时间戳之后。 -
equals(Object obj)
:比较两个Instant
对象是否相等。 -
toString()
:将Instant
对象转换为字符串表示。
-
-
构造方法:
-
Timestamp(long time)
:根据给定的毫秒数创建一个Timestamp
对象。 -
Timestamp(int year, int month, int day, int hour, int minute, int second, int nano)
:根据给定的年、月、日、小时、分钟、秒和纳秒创建一个Timestamp
对象。
-
-
常用方法:
-
getTime()
:返回自1970年1月1日00:00:00 GMT以来的毫秒数。 -
getNanos()
:返回纳秒数,范围为0-999,999,999。 -
setNanos(int n)
:设置纳秒数。 -
toInstant()
:将Timestamp
对象转换为Instant
对象。 -
toString()
:将Timestamp
对象转换为字符串表示。
-