Java中的时间戳【详解】

一.何为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); // 增加一小时

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/13672.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

给大家分享一套非常棒的python机器学习课程

给大家分享一套非常棒的python机器学习课程——《AI小天才:让小学生轻松掌握机器学习》,2024年5月完结新课,提供配套的代码笔记软件包下载!学完本课程,可以轻松掌握机器学习的全面应用,复杂特征工程&#x…

【C++刷题】优选算法——递归第三辑

floodfill篇 图像渲染 unordered_multimap<int, int> direction {{0, 1},{0, -1},{1, 0},{-1, 0} }; void dfs(vector<vector<int>>& image, int sr, int sc, int color, int val) {image[sr][sc] color;for(auto& e : direction){int x sr e.…

关于微服务的一点感悟和过往经验的思考

一、为什么有微服务 解决单体应用的局限性 随着业务发展&#xff0c;业务逻辑复杂、关联方多&#xff0c;导致业务系统的代码臃肿、难于做迭代或者维护&#xff0c;导致很多的问题&#xff0c;如&#xff1a;bug多、难于维护修复、每次需要评估改动服务接口影响的范围&#xf…

碰撞器触发事件(OnTriggerEnter/OnTriggerStay/OnTriggerExit)

碰撞器触发事件&#xff08;OnTriggerEnter/OnTriggerStay/OnTriggerExit&#xff09;简介 在Unity中&#xff0c;触发器事件是当一个游戏对象进入、停留或离开另一个游戏对象的触发器碰撞器时发生的事件。这些事件分别是: OnTriggerEnter: 当其他Collider首次进入触发器时调用…

服务端Web资源缓存

1.前言 虽然客户端缓存效果很好&#xff0c;但它有一个核心问题&#xff1a;要在本地提供资源&#xff0c;必须先将其存储在缓存中。因此&#xff0c;每个客户端都需要其缓存的资源。如果请求的资源需要大量计算&#xff0c;则无法扩展。服务器端缓存背后的理念是计算一次资源…

【CAN】libsocketcan库详解

1、简介 libsocketcan是用户空间通过SocketCAN操作CAN的接口。 源码:https://github.com/linux-can/libsocketcan 2、API详解 2.1 can_do_restart 1)说明:重启CAN接口 2)原型: int can_do_restart(const char *name);3)参数: name:CAN接口名,比如:can0、can1,…

继续分析开发人员容易被骗的原因和防范措施

继续分析开发人员容易被骗的原因和防范措施&#xff0c;可以深入探讨一些具体的技术细节和实际操作建议&#xff0c;以更全面地理解和应对这一问题。 技术细节&#xff1a; 未加密的敏感数据传输&#xff1a; 原因&#xff1a;开发人员可能忽视了数据传输过程中的安全性&#…

第10章 软件架构的演化和维护

软件架构周期&#xff1a;初始设计、实际使用、修改完善(这就是演化)、退化弃用。 演化和维护的目的&#xff1a;为了使软件能够适应环境的变化而进行的纠错性修改和完善性修改等&#xff0c;而且这个过程是一个不断迭代的过程。 架构演化的重要性、演化过程、演化分类、演化…

Vary HTTP 标头

1.前言 服务器端 Web 资源缓存的想法是在客户端和上游之间设置一个组件来缓存先前计算的结果&#xff0c;以避免后者过载。根据您的基础架构和要求&#xff0c;此组件可以是反向代理或 API 网关。HTTP 提供Cache-Control标头来自定义缓存的不同方面&#xff0c;例如&#xff0…

Java——通过方法交换实参值

想写一个方法来交换main函数中的两个变量值&#xff0c;代码如下&#xff1a; public class Test {public static void swap(int x,int y) {int tmp x;x y;y tmp;}public static void main(String[] args) {int a 10;int b 20;System.out.println("交换前&#xff1…

Autodesk Maya 2025软件安装教程(附软件下载地址)

软件简介&#xff1a; 软件【下载地址】获取方式见文末。注&#xff1a;推荐使用&#xff0c;更贴合此安装方法&#xff01; Autodesk Maya 2025是一款领先的三维动画设计软件&#xff0c;界面直观且功能丰富。它集成了全球领先的3D设计技术&#xff0c;提供了多种创意功能&a…

深度学习 --- stanford cs231 编程作业(如何在chrome中安装colab)

stanford cs231 编程作业(如何开始你的colab编程&#xff09; 斯坦福231n的所有作业都要求在colab里面做&#xff0c;colab可以为你提供免费的云计算。实际上在他的官网中也有关于如何安装colab的详细说明视频。 https://youtu.be/DsGd2e9JNH4https://youtu.be/DsGd2e9JNH4 我…

2831.找出最长等值子数组(哈希表+滑动窗口法)

给你一个下标从 0 开始的整数数组 nums 和一个整数 k 。 如果子数组中所有元素都相等&#xff0c;则认为子数组是一个 等值子数组 。注意&#xff0c;空数组是 等值子数组 。 从 nums 中删除最多 k 个元素后&#xff0c;返回可能的最长等值子数组的长度。 子数组 是数组中一个连…

电路笔记 :元器件焊接相关 酒精灯松香浴加热取芯片

记录一下只使用松香和小火源加热&#xff08;如酒精灯、小蜡烛&#xff09;从电路板中取芯片。 过程 多放松香 让松香淹没芯片尽量均匀加热&#xff0c;等芯片旁边的松香开始从芯片里冒细小的“泡泡”&#xff0c;就差不多了 注&#xff1a;这种方法也可以用于焊接&#xff0…

Qt QString详细用法

一.基础用法 1.创建QString对象 QString str1 "Hello, World!"; QString str2("This is a QString object."); //一个是等号的重载&#xff0c;一个是拷贝构造&#xff0c;本质上是等价的 2.获取字符串长度 int length str1.length(); // 返回字符串…

大模型落地竞逐,云计算大厂“百舸争流”

作者 | 辰纹 来源 | 洞见新研社 从ChatGPT到Sora&#xff0c;从图文到视频&#xff0c;从通用大模型到垂直大模型……经过了1年多时间的探索&#xff0c;大模型进入到以落地为先的第二阶段。 行业的躁动与资本的狂热相交汇&#xff0c;既造就了信仰派的脚踏实地&#xff0c;也…

7.从0做一个vue键盘组件

文章目录 1. 从0做一个键盘组件1.1. 最终效果1.2. 分析1.3. 实现1.4. 如何引用 1. 从0做一个键盘组件 首先是why的问题&#xff1a;为什么需要做键盘组件&#xff1f; 我们目前可知的场景&#xff1a; 在新增账单的时候&#xff0c;需要用到键盘在比如从账单列表页&#xff…

保护共享资源的方法(互斥锁)

我最近开了几个专栏&#xff0c;诚信互三&#xff01; > |||《算法专栏》&#xff1a;&#xff1a;刷题教程来自网站《代码随想录》。||| > |||《C专栏》&#xff1a;&#xff1a;记录我学习C的经历&#xff0c;看完你一定会有收获。||| > |||《Linux专栏》&#xff1…

MagicAnimate: Temporally Consistent Human Image Animation using Diffusion Model

show lab NUS&bytedancehttps://github.com/magic-research/magic-animate 问题引入 输入参考图片 I r e f I_{ref} Iref​和动作序列 p 1 : N [ p 1 , ⋯ , p N ] p^{1:N}[p_1,\cdots,p_N] p1:N[p1​,⋯,pN​]&#xff0c;其中 N N N表示的是帧数&#xff0c;输出的是 …

探索iOS中的KVC

目录 前言 1.iOS中的KVC&#xff08;键值编码&#xff09; 1. 什么是KVC&#xff1f; 2. 使用KVC 1.设置属性值 2.获取属性值 3. KVC的高级用法 1.访问私有属性 2.访问集合属性 4. KVC的安全性 5. KVC原理 1. 查找顺序 2. 设置值 6.参考文章 前言 这篇文章主要是…