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); // 增加一小时
总结
到此这篇关于Java中时间戳各种操作方法详解的文章就介绍到这了,更多相关Java中时间戳内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
相关文章
解决SpringMVC Controller 接收页面传递的中文参数出现乱码的问题
下面小编就为大家分享一篇解决SpringMVC Controller 接收页面传递的中文参数出现乱码的问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧2018-03-03
Java中replace、replaceAll和replaceFirst函数的用法小结
相信会java的同学估计都用过replace、replaceAll、replaceFirst这三个函数,可是,我们真的懂他们吗?下面通过这篇文章大家再来好好学习学习下这几个函数。2016-09-09
Java创建数组、赋值的四种方式详解(声明+创建+初始化 )
数组是一种数据结构,用来存储同一类型值的集合一旦创建了数组,就不能再改变它的长度,下面这篇文章主要给大家介绍了关于Java创建数组、赋值的四种方式(声明+创建+初始化 )的相关资料,需要的朋友可以参考下2024-04-04
SpringMVC中的ResourceUrlProviderExposingInterceptor详解
这篇文章主要介绍了SpringMVC中的ResourceUrlProviderExposingInterceptor详解,ResourceUrlProviderExposingInterceptor是Spring MVC的一个HandlerInterceptor,用于向请求添加一个属性,需要的朋友可以参考下2023-12-12
IntelliJ IDEA(或者JetBrains PyCharm)中弹出"IntelliJ IDEA License
今天小编就为大家分享一篇关于IntelliJ IDEA(或者JetBrains PyCharm)中弹出"IntelliJ IDEA License Activation"的解决办法,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧2018-10-10


最新评论