如何生成时间戳和如何生成UUID最新详解(教你怎么用)

先看代码,复制粘贴,demo跑起来

package com.example.test4;

import com.sun.deploy.util.StringUtils;

import java.math.BigInteger;
import java.text.SimpleDateFormat;
import java.time.LocalDateTime;
import java.time.ZoneOffset;
import java.util.ArrayList;
import java.util.Date;
import java.util.UUID;

public class demo5 {
    //时间戳
//    private final static SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss");
//    private String startDateTime = null;

    public static void main(String[] args) {

        String sId = "sid"+UUID.randomUUID().toString().replace("-", "").toLowerCase().substring(3);
        String sCode="scode"+sId.substring(5);
        String sId4K="4ksid"+sId.substring(5);
        String sCode4K="4kscode"+sId.substring(7);

        //UUID
        String mappingID=UUID.randomUUID().toString().replace("-", "").toLowerCase();
        System.out.println("mappingID = " + mappingID);
        //时间戳
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd-HH:mm:ss");
        String format = sdf.format(new Date());
        System.out.println("format = " + format);

        //把uuid的时间戳转成可以识别的时间戳 固定18位,需要多位可以再拼接
        LocalDateTime localDateTime = LocalDateTime.ofEpochSecond(138140162874696958L - 0x01b21dd213814000L, 0, ZoneOffset.ofHours(8));
        String s1 = localDateTime.now().toString().replace("-", "").replace(":", "").replace(".", "").toLowerCase();
        System.out.println("s1 = " + s1);
        //获取固定32位
        String s2=s1+s1.substring(4);
        System.out.println("s2 = " + s2);


    }
}

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

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

1 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

 

获取UUID的三种方式

UUID.randomUUID();  //最常用
UUID.fromString("095c64fe-c5bf-11ea-aec6-a402b9e2b04d");
UUID.nameUUIDFromBytes("身份证号码".getBytes());

    randomUUID() 随机获取一个UUID,有极小的概率会重复
    fromString() 根据一个符合UUID格式的字符串获取,不常用,我都有了还获取干嘛。
    nameUUIDFromBytes() 根据一个字节数组获取,一般要求给定的字节数组不重复
 

你可能感兴趣的:(精通javaSE,精通spring,精通java常用工具,java,intellij-idea,servlet)