`
tmj_159
  • 浏览: 707014 次
  • 性别: Icon_minigender_1
  • 来自: 永州
社区版块
存档分类
最新评论

JAVA获取时间戳,哪个更快

阅读更多

目前获取毫秒值大概有下面三种方法

 

//方法 一
System.currentTimeMillis(); 
//方法 二
Calendar.getInstance().getTimeInMillis();
//方法 三
new Date().getTime();

 最近做监控系统,发现代码中有前两种方法,然后突然有了一个想法,到底哪个更快呢?

然后做了如下实验:

 

import java.util.Calendar;
import java.util.Date;

public class TimeTest {
	private static long _TEN_THOUSAND=10000;
	public static void main(String[] args) {
		long times=1000*_TEN_THOUSAND;
		long t1=System.currentTimeMillis();
		testSystem(times);
		long t2=System.currentTimeMillis();
		System.out.println(t2-t1);
		testCalander(times);
		long t3=System.currentTimeMillis();
		System.out.println(t3-t2);
		testDate(times);
		long t4=System.currentTimeMillis();
		System.out.println(t4-t3);
	}
	
	public static void testSystem(long times){//use 188
		for(int i=0;i<times;i++){
			long currentTime=System.currentTimeMillis();
		}
	}

	public static void testCalander(long times){//use 6299
		for(int i=0;i<times;i++){
			long currentTime=Calendar.getInstance().getTimeInMillis();
		}
	}
	
	public static void testDate(long times){
		for(int i=0;i<times;i++){
			long currentTime=new Date().getTime();
		}
		
	}

}

因为很简单我就不加注释了,每种方法都运行1千万次,然后查看运行结果

187
7032
297

 

结果发现 System.currentTimeMillis() 这种方式速度最快

Calendar.getInstance().getTimeInMillis() 这种方式速度最慢,看看源码会发现,Canlendar因为要处理时区问题会耗费很多的时间。

所以建议多使用第一种方式。

 

另,System 类中有很多高效的方法,比如,arrayCopy 之类的

 

分享到:
评论
4 楼 wangyonglin1123 2016-12-23  
/**
* @return 获取时间戳
*/
public static java.sql.Timestamp getNowTimeStamp()
{
return new java.sql.Timestamp(System.currentTimeMillis());
}


jar包里的源代码
public Timestamp(long time) {
        super((time/1000)*1000);
        nanos = (int)((time%1000) * 1000000);
        if (nanos < 0) {
            nanos = 1000000000 + nanos;
            super.setTime(((time/1000)-1)*1000);
        }
    }
3 楼 u010311110 2016-11-14  
文章标题有误,容易误导新手。你获取的不是时间戳
2 楼 operating...mydream 2015-09-06  
1 楼 zwnJava 2013-02-20  
不错,以前没注意过。

相关推荐

    java获取当前时间戳的方法.doc.docx

    与`Calendar`相比,`Date`的创建和获取时间戳的速度更快。在测试中,`testDate`方法的执行时间介于`System.currentTimeMillis()`和`Calendar.getInstance().getTimeInMillis()`之间。 在进行性能敏感的操作时,`...

    java代码-获取当前时间戳

    - `main.java`可能包含了实现上述获取时间戳的Java代码。通常,`main`方法是程序执行的入口点。 - `README.txt`可能是对代码的简单介绍或使用说明,包括如何编译和运行代码。 在实际开发中,获取当前时间戳不仅...

    java DateUtil工具类时间戳类型转换详解

    DateUtil 工具类是基于 Date 类的扩展,它提供了更多的日期处理方法,包括时间戳类型转换、日期格式化、日期解析等。DateUtil 工具类的作用是提供一个更加便捷、灵活的日期处理方式,帮助开发者快速实现日期处理任务...

    自己开发的Windows日志获取源码

    《使用Java开发Windows日志获取程序的深度解析》 在信息技术领域,日志记录是系统监控和故障排查的重要环节。Windows操作系统提供了丰富的日志信息,包括Security、Application等多种类型,这些日志对于开发者和...

    layui前端时间戳转化实例

    综上所述,layui前端时间戳转化实例展示了如何结合layui的表格渲染和JavaScript扩展,实现从后端获取时间戳数据并转化为用户友好的日期格式显示。这在日常开发中是非常常见且实用的技巧,对于提升用户体验有显著作用...

    Java线程检测和数据收集工具

    在Java应用程序的运行过程中,了解线程的状态和行为至关重要,因为这可以帮助我们诊断性能问题、内存泄漏或死锁。...通过深入了解并熟练运用这些工具,开发者可以更好地理解和管理他们的Java应用程序。

    Introduction to java programming

    ### Java编程基础知识点详解 #### 一、简介 本文档主要介绍了Java编程语言的基础知识,适合初学者入门学习。...以上就是对Java编程基础知识点的详细介绍,希望能帮助初学者更好地理解和掌握Java编程语言。

    javautils一些工具类

    在Java中,日期和时间的处理往往比较复杂,JavaUtils可能提供了一些简洁的API来处理日期和时间,例如格式化日期、计算两个日期之间的差值、获取当前时间戳等。这些工具类通常会比直接使用`java.util.Date`或`java....

    java自动生成id策略

    `ThreadLocalRandom`被用来在每个线程内部生成随机数,它比`Random`更快且更适合多线程环境。 值得注意的是,虽然这种策略可以满足大多数情况,但在高并发场景下,仅依赖毫秒数可能会导致ID冲突,因为两个请求可能...

    RTSP.rar_RTSP JAVA_java rtsp_java 流媒体_rtsp_video

    `RTPPacket.java`是RTP包的表示类,它封装了RTP数据包的结构,包括负载类型、时间戳、序列号等信息。这个类可能包含解析和构建RTP包的函数,以便于在RTP源流和目的地之间进行数据传输。 `StreamingMIDlet.java`是一...

    Java zip 压缩/解压源码

    你可以通过它的构造函数传入ZIP文件路径来创建一个ZipFile对象,然后使用`entries()`方法获取ZIP文件中的所有条目。 2. **ZipOutputStream类**: 另一个关键类是`java.util.zip.ZipOutputStream`,它继承自`java....

    2021全国行政区域4级,5级(不含港澳台)

    在描述中提到的 "4,5级联动" 意味着这个数据集不仅包含省级和市级信息,还包含了区县级和更细级别的乡镇、街道等信息,这样的层级关系对于实现如下拉选择框的联动效果是必要的。 标签 "源码软件" 暗示这可能是一个...

    30个java工具类

    2. **时间工具类(TimeUtil.java)**:这类工具类主要用于处理时间和日期,可能包括获取当前时间、时间戳转换、日期格式化、时间间隔计算等功能。在处理与时间相关的业务逻辑时,这些方法非常实用。 3. **日期工具类...

    java实现局域网互发消息

    Java提供了`InetAddress`类来处理IP地址和主机名,可以通过`getLocalHost()`获取本地主机的IP,`getHostAddress()`获取IP地址字符串。局域网内的设备通常处于同一子网,可以通过广播或者特定IP地址进行通信。 3. ...

    订单号的生成redis中获取

    Redis是一个高性能的键值存储系统,常用于缓存和实时数据操作,其速度快,适合处理高并发场景下的订单号生成。 描述中的博文链接指向了一篇可能详细介绍如何在Java环境中使用Redis实现订单号生成的文章。虽然具体的...

    java-多文件上传dome

    实现多文件上传功能,还可以借助第三方库,如Apache Commons FileUpload或Spring MVC的MultipartFile接口,它们提供了更强大的功能和更简单的API。例如,使用Spring MVC,你只需在控制器方法中声明一个`...

    java控制页面刷新频率

    首先,它获取当前时间的时间戳,然后检查session中是否存在"bj"属性,如果存在,则计算当前时间与上次访问时间的差值,如果这个差值小于1500毫秒,则通过注释中的`alert`语句提示用户不要频繁刷新页面,实际上这里...

    java微信支付(小程序),退款(V3版本)

    首先,微信支付V3是微信官方推出的新一代支付接口,它提供更安全、更高效的服务。在进行退款操作时,我们需要遵循以下步骤: 1. **获取Access Token**:在调用微信支付接口前,首先要通过商户号(MchID)和AppID...

    JAVA面试重点话术(张大大吐血整理).doc

    Lock提供更细粒度的锁控制,需要手动获取和释放,支持尝试锁、公平锁等功能。 面试中,理解并能深入讨论这些核心概念将有助于展示你的专业技能和问题解决能力。同时,熟悉Redis(内存数据库,常用于缓存)、Dubbo...

    java编写 猜数字游戏

    - **使用Scanner类获取用户输入**:`Scanner`类用于读取控制台输入。在这个游戏中,用户需要输入猜测的数字。 ```java Scanner scanner = new Scanner(System.in); int scan = scanner.nextInt(); ``` #### 四...

Global site tag (gtag.js) - Google Analytics