当前位置: 首页 > 编程笔记 >

Java中时间戳的获取和转换的示例分析

颜阳炎
2023-03-14
本文向大家介绍Java中时间戳的获取和转换的示例分析,包括了Java中时间戳的获取和转换的示例分析的使用技巧和注意事项,需要的朋友参考一下

日期时间是Java一个重要的数据类型,常见的日期时间格式通常为“yyyy-MM-dd HH:mm:ss”,但是计算机中存储的日期时间并非字符串形式,而是长整型的时间戳。因为字符串又占用空间又难以运算,相比之下,长整型只占用四个字节,普通的加减乘除运算更是不在话下,所以时间戳是最佳的日期时间存储方案。
获取时间戳的代码很简单,只需调用System类的currentTimeMillis方法即可,如下所示:

// 从System类获取当前的时间戳
long timeFromSystem = System.currentTimeMillis();
System.out.println("timeFromSystem="+timeFromSystem);

众所周知,时间戳以毫秒为单位,为了求得它的计时起点,可以将其转换时间单位,先把毫秒的数量转成秒的数量,再把秒的数量转成分钟的数量,再把分钟的数量转成小时的数量,再把小时的数量转成天的数量,最后把天的数量转成年的数量。不过每年的天数不固定,像平年有365天,闰年有366天,按照四年一闰,平均每年的天数=(365+365+365+366)/4=365.25。于是把时间戳转为年份数量的代码就成了下面这样:

int years = (int) (timeFromSystem/1000/60/60/24/365.25);
System.out.println("years="+years);

运行上述转换代码,可见如下的输出日志:

timeFromSystem=1595578123444
years=50

由于当前年份是2020,从2020往前倒推50年,正好是1970年,原来时间戳是从1970年开始累加的呀。
通过System类只是获取时间戳的第一种方式,正如茴香豆的茴有四种写法那样,时间戳也有四种获取方式,除了之前提到的System类,还有下列三种时间戳获取方式:

1、从Date实例获取时间戳

调用Date实例的getTime方法即可获得对应的时间戳,获取代码示例如下:

// 从日期实例获取对应的时间戳
long timeFromDate = new Date().getTime();
System.out.println("timeFromDate="+timeFromDate);

2、从Calendar实例获取时间戳

调用Calendar实例的getTimeInMillis方法即可获得对应的时间戳,获取代码示例如下:

// 从日历实例获取对应的时间戳
long timeFromCalendar = Calendar.getInstance().getTimeInMillis();
System.out.println("timeFromCalendar="+timeFromCalendar);

3、从LocalDateTime实例获取时间戳

从LocalDateTime获取时间戳稍微麻烦些,得先把LocalDateTime实例转为Instant实例,再调用Instant实例的toEpochMilli方法获得对应的时间戳,获取代码示例如下:

// 从本地日期时间实例获取对应的时间戳
LocalDateTime localDateTime = LocalDateTime.now();
Instant instant1 = localDateTime.toInstant(ZoneOffset.ofHours(8));
long timeFromLocal1 = instant1.toEpochMilli();
System.out.println("timeFromLocal1="+timeFromLocal1);

上面获取代码基于北京时间,所以转为Instant实例时使用了东八区,倘若在东八区以外的其他地区运行上述代码,就无法得到正确的当地时间戳,此时要先设置当地的默认时区,再将LocalDateTime实例转为Instant实例,获取代码示例如下:

Instant instant2 = localDateTime.atZone(ZoneId.systemDefault()).toInstant();
long timeFromLocal2 = instant1.toEpochMilli();
System.out.println("timeFromLocal2="+timeFromLocal2);

尽管时间戳的获取方式多达四种,然而最高效的还是第一种System方式,它不但代码最简洁,时间消耗也最小。

有了时间戳之后,还能将它转换为对应的日期、日历和本地日期时间。转换过程说明如下:
1、把时间戳转换为Date类型,调用Date实例的setTime方法即可。
2、把时间戳转换为Calendar类型,调用Calendar实例的setTimeInMillis方法即可。
3、把时间戳转换为LocalDateTime类型,先调用Instant类的ofEpochMilli方法,把时间戳转成Instant实例;再调用LocalDateTime类的ofInstant方法,把Instant实例转成LocalDateTime实例。
下面是把时间戳转为日期、日历和本地日期时间的代码例子:

// 从System类获取当前的时间戳
long timestamp = System.currentTimeMillis();
// 下面把时间戳转换为日期实例
Date date = new Date();
date.setTime(timestamp);
// 下面把时间戳转换为日历实例
Calendar calendar = Calendar.getInstance();
calendar.setTimeInMillis(timestamp);
// 下面把时间戳转换为本地日期时间实例
Instant instant = Instant.ofEpochMilli(timestamp);
LocalDateTime localDateTime = LocalDateTime.ofInstant(instant, ZoneId.systemDefault());

到此这篇关于Java中时间戳的获取和转换的示例分析的文章就介绍到这了,更多相关Java 时间戳 获取转换内容请搜索小牛知识库以前的文章或继续浏览下面的相关文章希望大家以后多多支持小牛知识库!

 类似资料:
  • 我正在开发一个带有MySQL数据库的Java应用程序,该数据库位于与我的服务器不同的时区,我正试图决定在我的数据库上使用DATETIME还是TIMESTAMP。 在阅读了诸如我应该使用字段'datetime'还是'TIMESTAMP'之类的问题,以及MySQL文档之后,我认为TIMESTAMP更适合我,因为它将值转换为UTC以存储,并返回到当前时区以进行检索。 此外,正如用户Jesper在本文中所

  • 本文向大家介绍IOS 时间和时间戳之间转化示例,包括了IOS 时间和时间戳之间转化示例的使用技巧和注意事项,需要的朋友参考一下 以毫秒为整数值的时间戳转换 时间戳转化为时间NSDate 时间转化为时间戳 通过比较时间与当前时间返回年月日的方法 以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持呐喊教程。

  • 本文向大家介绍C++时间戳转换成日期时间的步骤和示例代码,包括了C++时间戳转换成日期时间的步骤和示例代码的使用技巧和注意事项,需要的朋友参考一下 因工作需要,经常跟时间戳打交道,但是因为它仅仅是一个数字,我们很难直接看出它有什么意义,或两个时间戳之间究竟差了多长的间隔。于是从MSDN for Visual Studio6上找到了时间戳转换成日期时间的算法。本文除介绍这一算法外,还提供一个示例代码

  • 本文向大家介绍JS的时间格式化和时间戳转换函数示例详解,包括了JS的时间格式化和时间戳转换函数示例详解的使用技巧和注意事项,需要的朋友参考一下 JS的时间格式化和时间戳转换函数 ps:js 时间戳 和 格式化时间转化 到此这篇关于JS的时间格式化和时间戳转换函数示例详解的文章就介绍到这了,更多相关js 时间格式化时间戳转换函数内容请搜索呐喊教程以前的文章或继续浏览下面的相关文章希望大家以后多多支持

  • 本文向大家介绍js获取时间并实现字符串和时间戳之间的转换,包括了js获取时间并实现字符串和时间戳之间的转换的使用技巧和注意事项,需要的朋友参考一下 废话少说,直接上代码

  • 我有一个简单的Web界面,以“2009/10/09 11:00”或“yyyy/MM/dd HH: mm”的形式获取日期和时间。时间(从用户的角度来看)是东部时间。 我希望能够获取这个字符串,将其转换为UTC时间戳,这样我就可以获取这个时间戳,并根据指定的时间查询我们的NoSQL数据库。 我的代码如下: 我从UI获取字符串并将其存储在“startSearchTime”中。我通过增加4个小时将其从东部