java时间问题学习

        在java学习代码中,往往在时间的获取、判断、存储中出现一些问题。例如如何获取时间、如何修改时间、如何进行时间判断,我们常常在这上面犯难。

  • Java提供了以下几种方法来获取当前时间、存储时间、从数据库中获取时间和时间戳:

    需要注意的是,Java 8之后引入了新的日期和时间API(java.time包),推荐使用这些新的API来处理日期和时间,而不是使用旧的java.util.Datejava.sql包中的类。新的API提供了更好的可读性、线程安全性和易用性。

    1. 获取当前时间:

      • 使用java.util.Date类的new Date()方法可以获取当前系统时间的Date对象。

      • 使用java.time.LocalDateTime类的now()方法可以获取当前系统时间的LocalDateTime对象。

      • 使用java.time.LocalTime类的now()方法可以获取当前系统时间的LocalTime对象。

      • 使用System.currentTimeMillis()方法可以获取当前系统时间的毫秒数。

    2. 存储时间:

      • 使用java.util.Date类的构造方法可以将指定的日期和时间存储为Date对象。

      • 使用java.time.LocalDateTime类的of()方法可以将指定的日期和时间存储为LocalDateTime对象。

      • 使用java.time.LocalTime类的of()方法可以将指定的时间存储为LocalTime对象。

    3. 从数据库中获取时间:

      • 使用java.sql.ResultSet类的getTimestamp()方法可以从数据库中获取时间戳,并将其转换为Java的java.sql.Timestamp对象。

      • 使用java.sql.ResultSet类的getTime()方法可以从数据库中获取时间,并将其转换为Java的java.sql.Time对象。

      • 使用java.sql.ResultSet类的getDate()方法可以从数据库中获取日期,并将其转换为Java的java.sql.Date对象。

    4. 时间戳:

      • 使用java.util.Date类的getTime()方法可以将Date对象转换为时间戳(毫秒数)。

      • 使用java.time.Instant类的now()方法可以获取当前系统时间的时间戳。

      • 使用java.sql.Timestamp类的getTime()方法可以将Timestamp对象转换为时间戳(毫秒数)。

一、java.util.Date类

      以下是关于java.util.Date类的详细方法:

  1. 构造方法:

    • Date():创建一个表示当前系统时间的Date对象。

    • Date(long date):根据给定的毫秒数创建一个Date对象。

  2. 常用方法:

    • getTime():返回自1970年1月1日00:00:00 GMT以来的毫秒数。

    • setTime(long time):设置Date对象的时间为给定的毫秒数。

    • before(Date when):检查当前日期是否在给定日期之前。

    • after(Date when):检查当前日期是否在给定日期之后。

    • equals(Object obj):比较两个Date对象是否相等。

    • toString():将Date对象转换为字符串表示。

  3. 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类。

  1. 构造方法:

    • 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对象。

  2. 常用方法:

    • 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类。

  1. 构造方法:

    • 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对象。

  2. 常用方法:

    • 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.Instantjava.time.LocalDateTime

 关于resultSet中引用了一些关于时间的方法,详介以下其内容:

   java.sql.ResultSet类是Java中用于表示数据库查询结果集的接口。它提供了访问和处理查询结果的方法。以下是java.sql.ResultSet类的主要内容:

         需要注意的是,java.sql.ResultSet是一个只读的结果集,只能用于获取查询结果,不能对数据库进行修改。如果需要对数据库进行修改操作,需要使用java.sql.Statementjava.sql.PreparedStatement接口。

         另外,为了确保资源的正确释放,使用完ResultSet后应及时调用close()方法关闭结果集。

  1. 导航方法:

    • next():将光标移动到结果集的下一行。

    • previous():将光标移动到结果集的上一行。

    • first():将光标移动到结果集的第一行。

    • last():将光标移动到结果集的最后一行。

    • absolute(int row):将光标移动到指定行。

    • relative(int rows):将光标相对于当前位置移动指定行数。

  2. 获取数据方法:

    • getInt(int columnIndex):获取指定列的整数值。

    • getString(int columnIndex):获取指定列的字符串值。

    • getDouble(int columnIndex):获取指定列的双精度浮点数值。

    • getDate(int columnIndex):获取指定列的日期值。

    • getTime(int columnIndex):获取指定列的时间值。

    • getObject(int columnIndex):获取指定列的通用对象值。

  3. 列索引和列名的映射方法:

    • findColumn(String columnName):根据列名获取列的索引。

    • getColumnLabel(int columnIndex):获取指定列的标签(列名)。

  4. 结果集元数据方法:

    • getMetaData():获取结果集的元数据,返回java.sql.ResultSetMetaData对象,用于获取关于结果集的列信息。

  5. 关闭方法:

    • 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类主要用于与数据库交互,可以在PreparedStatementResultSet中使用。而java.time.Instant类是Java 8及以后版本中的日期时间类,更适用于通用的日期时间操作。如果需要在Java中处理时间戳,推荐使用java.time.Instant类。

  1. 构造方法:

    • Instant.now():创建一个表示当前系统时间的Instant对象。

    • Instant.ofEpochMilli(long epochMilli):根据给定的毫秒数创建一个Instant对象。

    • Instant.ofEpochSecond(long epochSecond):根据给定的秒数创建一个Instant对象。

  2. 常用方法:

    • 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对象转换为字符串表示。

  3. 构造方法:

    • Timestamp(long time):根据给定的毫秒数创建一个Timestamp对象。

    • Timestamp(int year, int month, int day, int hour, int minute, int second, int nano):根据给定的年、月、日、小时、分钟、秒和纳秒创建一个Timestamp对象。

  4. 常用方法:

    • getTime():返回自1970年1月1日00:00:00 GMT以来的毫秒数。

    • getNanos():返回纳秒数,范围为0-999,999,999。

    • setNanos(int n):设置纳秒数。

    • toInstant():将Timestamp对象转换为Instant对象。

    • toString():将Timestamp对象转换为字符串表示。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值