Java中获取时间戳

Java中获取时间戳**Java语言中关于三种时间戳的获取之心得**最近项目开发过程中发现了项目中获取时间戳的业务。而获取时间戳有以下三种方式,首先先声明推荐使用System类来获取时间戳,下面一起看一看三种方式。1.System.currentTimeMillis()System类中的currentTimeMillis()方法是三种方式中效率最好的,运行时间最短。开发中如果设计到效率问题,推荐使用此种方式获取。System.currentTimeMillis()2.newDate().getTime()除

大家好,又见面了,我是你们的朋友全栈君。

**

Java中获取时间戳 三种方式对比

**
最近项目开发过程中发现了项目中获取时间戳的业务。而获取时间戳有以下三种方式,首先先声明推荐使用System类来获取时间戳,下面一起看一看三种方式。

1.System.currentTimeMillis()

System类中的currentTimeMillis()方法是三种方式中效率最好的,运行时间最短。开发中如果设计到效率问题,推荐使用此种方式获取。

System.currentTimeMillis()

2.new Date().getTime()

除了System类,使用量很大的应该就是Date类了,包括我也一样开发中如果涉及到日期的首先会想到Date,但date类中获取时间戳并不是最有效率的,翻看他的源码:
无参构造如下?

public Date() { 
   
    this(System.currentTimeMillis());
}

从源码可以看出,new Date()其实就是调用了System.currentTimeMillis(),再传入自己的有参构造函数。不难看出,如果只是仅仅获取时间戳,即使是匿名的new Date()对象也会有些许的性能消耗, 从提升性能的角度来看,只是仅仅获取时间戳,不考虑时区的影响(时区为什么会有影响看下一段),直接调用System.currentTimeMillis()会更好一些。

3.Calendar.getInstance().getTimeInMillis()

这种方式其实是速度最慢,看其源码就会发现,Canlendar是区分时区的,因为要处理时区问题会耗费很多的时间。

附测试如下:

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();  
        }  
          
    }  
  
}  

效果如下

187  
7032  
297
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/135105.html原文链接:https://javaforall.net

(0)
上一篇 2022年5月3日 下午1:00
下一篇 2022年5月3日 下午1:00


相关推荐

  • switch循环的使用

    switch循环的使用while 循环语句应用场景 不明确循环次数 推荐使用 while 循环 switch 语句格式 switch 表达式 case 值 1 语句体 break case 值 2 语句体 break defa

    2026年3月16日
    2
  • IIS启动就报错:发生意外错误0x8ffe2740

    IIS启动就报错:发生意外错误0x8ffe2740IIS启动就报错:发生意外错误0x8ffe2740现象:  IIS的WEB服务器(停止),启动不了。启动就报错:发生意外错误0x8ffe2740。分析:  如果系统中存在端口冲突就有可能发生本情况.IIS默认使用80端口进行HTTP通信.如果除IIS外的应用程序正在运行并且正在相同的IP…

    2022年7月26日
    10
  • QIIME 2教程. 01简介和安装 Introduction & Install(2020.11)

    QIIME 2教程. 01简介和安装 Introduction & Install(2020.11)QIIME2https://qiime2.org/简介QIIME2是微生物组分析软件QIIME(截止17.7.13被引7771次)的全新版(不是升级版),全部python3全新编写,并于明年全面接替QIIME,是代表末来的分析方法标准(大牛们制定方法标准,我们跟着用就好了)。优点更易于安装:QIIME1的安装让无数生信人竞折腰,现在官方发布了docker,下载即可运行;使用方法多样:支持命令

    2022年6月29日
    24
  • wing是什么_强制排序

    wing是什么_强制排序给定 n 本书,编号为 1∼n。在初始状态下,书是任意排列的。在每一次操作中,可以抽取其中连续的一段,再把这段插入到其他某个位置。我们的目标状态是把书按照 1∼n 的顺序依次排列。求最少需要多少次操作。输入格式第一行包含整数 T,表示共有 T 组测试数据。每组数据包含两行,第一行为整数 n,表示书的数量。第二行为 n 个整数,表示 1∼n 的一种任意排列。同行数之间用空格隔开。输出格式每组数据输出一个最少操作次数。如果最少操作次数大于或等于 5 次,则输出 5 or more。每个

    2022年8月9日
    12
  • 关于excel的vba数组

    关于excel的vba数组转自 微点阅读 https www weidianyuedu com 什么是 vba 数组 先让我们从字面来看一下它的意思 数 数据 组 组合 从字面很直观地看出 数组就是 N 个数据的组合 如果某个变量只包含一个数据 就不是数组 只能是一个普通的变量 有人把数组比喻为一串用线穿起来的辣椒 也有人比喻为班级里一群学生 如果你当过兵 每天训练前肯定会先做队伍集合 如果这个队伍是一个班 班长肯定会叫全体士兵先排队点名 每个士兵会从头至尾进行报数 1 2 3 这样最后一名士兵所报的数就是当前这

    2026年3月18日
    2
  • Git Flow印象

    Git Flow印象

    2021年8月21日
    72

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号