Java中的时间戳各种操作方法详解

 更新时间:2024年10月15日 09:37:48   作者:路人借问遥招手  
在Java中时间戳指自1970年1月1日午夜(UTC)以来的毫秒数,Java提供了多种方式获取和操作时间戳,包括System.currentTimeMillis()、java.util.Date、java.sql.Timestamp类,Java8及以后版本引入了java.time包,增强了日期时间处理能力,需要的朋友可以参考下

一.何为Java时间戳

在Java中,时间戳通常指的是自1970年1月1日午夜(UTC)以来的毫秒数。

这个概念在Java中主要通过java.util.Date类和java.sql.Timestamp类来表示

而在Java 8及以后的版本中,引入了新的日期时间API,即java.time包,提供了更多的功能和灵活性。

二.获取当前时间戳

1.使用System.currentTimeMillis()方法

long currentTimestamp = System.currentTimeMillis();

2. 使用java.util.Date 类

java.util.Date类可以用来表示特定的瞬间,它包含了自1970年1月1日午夜(UTC)以来的毫秒数。

// 创建一个Date对象表示当前时间
Date now = new Date();
long timestamp = now.getTime(); // 获取时间戳

// 从一个已知的时间戳创建Date对象
long timestamp = ... // 假设你有一个时间戳
Date date = new Date(timestamp);

3. 使用java.sql.Timestamp 类

java.sql.Timestamp类是java.util.Date的一个子类,它提供了更高精度的时间表示,包括纳秒

// 创建一个Timestamp对象表示当前时间
Timestamp now = new Timestamp(System.currentTimeMillis());

// 从一个已知的时间戳创建Timestamp对象
long timestamp = ... // 假设你有一个时间戳
Timestamp ts = new Timestamp(timestamp);

4.Java 8中的 java.time 包

Java 8引入了一个新的日期时间API,提供了更好的处理日期和时间的类。其中,Instant类可以用来表示时间戳。

// 获取当前时间的Instant对象
Instant now = Instant.now();
long timestamp = now.toEpochMilli(); // 获取时间戳

// 从一个已知的时间戳创建Instant对象
long timestamp = ... // 假设你有一个时间戳
Instant instant = Instant.ofEpochMilli(timestamp);

三.格式化时间戳

要将时间戳转换为可读的日期时间格式,可以使用SimpleDateFormat(Java 8之前)或DateTimeFormatter(Java 8及以后)。

1.使用 SimpleDateFormat

// 假设你有一个时间戳
long timestamp = ...

// 创建SimpleDateFormat对象
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

// 将时间戳转换为Date对象,然后格式化
String formattedDate = sdf.format(new Date(timestamp));
System.out.println(formattedDate);

2.使用 DateTimeFormatter

// 假设你有一个时间戳
long timestamp = ...

// 创建DateTimeFormatter对象
DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");

// 将时间戳转换为Instant对象,然后转换为LocalDateTime对象,最后格式化
Instant instant = Instant.ofEpochMilli(timestamp);
LocalDateTime ldt = LocalDateTime.ofInstant(instant, ZoneId.systemDefault());
String formattedDate = ldt.format(dtf);
System.out.println(formattedDate);

四.时间戳与字符串的转换

1.将时间戳转换为字符串

// 假设你有一个时间戳
long timestamp = ...

// 使用SimpleDateFormat
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String dateStr = sdf.format(new Date(timestamp));

// 使用DateTimeFormatter
DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
Instant instant = Instant.ofEpochMilli(timestamp);
LocalDateTime ldt = LocalDateTime.ofInstant(instant, ZoneId.systemDefault());
String dateStr = ldt.format(dtf);

2.将字符串转换为时间戳

// 假设你有一个日期时间的字符串表示
String dateStr = "2023-04-01 12:34:56";

// 使用SimpleDateFormat
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
try {
    Date date = sdf.parse(dateStr);
    long timestamp = date.getTime();
} catch (ParseException e) {
    e.printStackTrace();
}

// 使用DateTimeFormatter
DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
LocalDateTime ldt = LocalDateTime.parse(dateStr, dtf);
Instant instant = ldt.atZone(ZoneId.systemDefault()).toInstant();
long timestamp = instant.toEpochMilli();

五.时区处理

在处理时间戳时,时区是一个非常重要的因素。Java中的ZoneId类可以用来表示不同的时区。

// 获取当前时区的偏移量
ZoneId currentZone = ZoneId.systemDefault();
ZonedDateTime zdt = ZonedDateTime.now(currentZone);
long offsetInMillis = zdt.getOffset().getTotalSeconds() * 1000;

六.时间戳的加减

要对时间戳进行加减操作,可以使用java.time.Duration类或直接对毫秒数进行加减。

// 假设你有一个时间戳
long timestamp = ...

// 增加一小时的时间戳
Instant instant = Instant.ofEpochMilli(timestamp);
Duration oneHour = Duration.ofHours(1);
Instant newInstant = instant.plus(oneHour);
long newTimestamp = newInstant.toEpochMilli();

// 或者直接对毫秒数进行加减
long newTimestamp = timestamp + (60 * 60 * 1000); // 增加一小时

总结 

到此这篇关于Java中时间戳各种操作方法详解的文章就介绍到这了,更多相关Java中时间戳内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • SpringBoot中RabbitMQ集群的搭建详解

    SpringBoot中RabbitMQ集群的搭建详解

    单个的 RabbitMQ 肯定无法实现高可用,要想高可用,还得上集群。这篇文章主要介绍了SpringBoot中RabbitMQ集群的两种模式的搭建:普通集群搭建和镜像集群搭建,需要的朋友可以参考一下
    2021-12-12
  • Java中byte、byte数组与int、long的转换详解

    Java中byte、byte数组与int、long的转换详解

    这篇文章分别给大家介绍了Java中byte和int之间的转换、Java中 byte数组和int之间的转换、Java中byte数组和long之间的转换以及整理了整体工具类的源码,需要的朋友可以参考借鉴,下面来一起看看吧。
    2017-02-02
  • 关于实体类中Date属性格式化@JsonFormat @DateTimeFormat

    关于实体类中Date属性格式化@JsonFormat @DateTimeFormat

    这篇文章主要介绍了关于实体类中Date属性格式化@JsonFormat @DateTimeFormat问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-07-07
  • Spring IOC容器Bean管理的完全注解开发放弃配置文件

    Spring IOC容器Bean管理的完全注解开发放弃配置文件

    这篇文章主要为大家介绍了Spring IOC容器的Bean管理完全注解开发放弃配置文件,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-05-05
  • 详解spring-data-jpa中jpql的投影查询

    详解spring-data-jpa中jpql的投影查询

    投影查询,就是仅仅检索表的部分字段。而不是粗暴的 SELECT * FROM...检索出所有列数据,这篇文章主要介绍了spring-data-jpa中jpql的投影查询,需要的朋友可以参考下
    2021-09-09
  • Spring boot整合ELK详细过程

    Spring boot整合ELK详细过程

    ELK是由Elasticsearch、Logstash和Kibana三个开源软件组成的技术堆栈,主要用于数据的存储、处理和可视化,本文给大家介绍Spring boot整合ELK详细过程,感兴趣的朋友一起看看吧
    2024-01-01
  • Java中ThreadLocal的用法和原理详解

    Java中ThreadLocal的用法和原理详解

    这篇文章主要为大家详细介绍了Java中ThreadLocal的用法和原理,文中的示例代码讲解详细,具有一定的学习价值,感兴趣的可以了解一下
    2023-04-04
  • Nacos配置的多文件加载与共享配置方式

    Nacos配置的多文件加载与共享配置方式

    这篇文章主要介绍了Nacos配置的多文件加载与共享配置方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-11-11
  • Java日常练习题,每天进步一点点(59)

    Java日常练习题,每天进步一点点(59)

    下面小编就为大家带来一篇Java基础的几道练习题(分享)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧,希望可以帮到你
    2021-08-08
  • 利用Java编写24点小游戏的实例代码

    利用Java编写24点小游戏的实例代码

    这篇文章主要给大家介绍了关于如何利用Java编写24点小游戏的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-01-01

最新评论