new Date() 方法到底是获取什么时间

2023-05-16

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

1、问题

java 中,new Date() 方法,获取的时间,究竟与当前的系统时间有什么关联?简单的时刻对应关系吗?

2、测试环境

  • 版本:jdk1.8.0_131
  • 主方法:
    public static void main(String[] args) throws InterruptedException {
        SimpleDateFormat dateFormat = new SimpleDateFormat("HH:mm:ss");
        int i = 0;
        while(true){
            System.out.println(i + "\t" +dateFormat.format( new Date() ) );
            i++;
            Thread.sleep(2000);
        }
    }
    

3、更新时间前

更新时间前

如上图所示,控制台输出的时间,与当前的系统时间一致。

4、更新时间后

保持该main方法一直在运行(不中断,一直在死循环中), 利用win10下的时间设置,更改系统时间后

更新时间后

如上图所示,控制台输出的时间,依然以更新时间前的为基准进行输出。

5、代码溯源

  • Date.java
package java.util;
public class Date
    /**
     * Allocates a <code>Date</code> object and initializes it so that
     * it represents the time at which it was allocated, measured to the
     * nearest millisecond.
     *
     * @see     java.lang.System#currentTimeMillis()
     */
    public Date() {
        this(System.currentTimeMillis());
    }
}
  • System.java
package java.lang;
public final class System {
    /**
     * Returns the current time in milliseconds.  Note that
     * while the unit of time of the return value is a millisecond,
     * the granularity of the value depends on the underlying
     * operating system and may be larger.  For example, many
     * operating systems measure time in units of tens of
     * milliseconds.
     *
     * <p> See the description of the class <code>Date</code> for
     * a discussion of slight discrepancies that may arise between
     * "computer time" and coordinated universal time (UTC).
     *
     * @return  the difference, measured in milliseconds, between
     *          the current time and midnight, January 1, 1970 UTC.
     * @see     java.util.Date
     */
    public static native long currentTimeMillis();
}

6、分析

现象:JVM 在某一时刻,获取当前系统时间,同时内部维护该时间(或者说时刻更为准确),后续所有的时间操作,均以此时刻为基准。

由于不确定该时刻是JVM启动时,还是调用 new Date() 方法时;同时为了排除SimpleDateFormat相关方法故继续测试。

7、 继续测试1

更新测试主方法:

  • 要点:确定该时刻,同时排除SimpleDateFormat相关方法影响
public static void main(String[] args) throws InterruptedException {
    int i = 0;
    System.out.println("开始---" );
    Thread.sleep(10000);
    System.out.println("正式输出---" );
    while(true){
        System.out.println(i + "\t" + new Date() );
        i++;
        Thread.sleep(2000);
    }
}

说明:在Thread.sleep(10000) ,利用这段时间(10秒),更新系统时间

分析与继续测试

如上图,更新系统时间前,JVM进程已经启动。

分析与继续测试

如上图,利用这段时间(10秒),更新系统时间,此时,控制台输出的时间,以更新后的时间为基准进行输出。

8、继续测试2

现象:确定不是在 JVM启动时,内部维护该时刻。

但是依然不确定该时刻是调用 new Date() 方法时,还是调用 **System.currentTimeMillis()**时(参见 5、代码溯源 部分 ),故继续测试。

更新测试主方法:

  • 要点:在调用new Date()前,先行调用System.currentTimeMillis() 方法。
     public static void main(String[] args) throws InterruptedException {
        int i = 0;
        System.out.println("开始---" );
        System.out.println("当前系统时间对应的毫秒数:" + System.currentTimeMillis());
        Thread.sleep(10000);
        System.out.println("正式输出---" );
        while(true){
            System.out.println(i + "\t" + new Date() );
            i++;
            Thread.sleep(2000);
        }
    }
    

测试方法同上一部分,即:

利用这段时间(10秒),更新系统时间.

分析与继续测试

现象:该时刻不以调用 System.currentTimeMillis() 时为基准。

9、 分析

System.currentTimeMillis()产生一个当前的毫秒,这个毫秒其实就是自1970年1月1日0时起的毫秒数,Date()其实就是相当于Date(System.currentTimeMillis()); 因为Date类还有构造Date(long date),用来计算long秒与1970年1月1日之间的毫秒差。得到了这个毫秒数,我们自己也可以算起现在的年月日周时

上述文字,参考:JAVA获取当前时间System.currentTimeMillis()_百度经验

10、猜想

new Date()第一次执行时,获取当前系统时间,同时内部维护该时间(或者说时刻更为准确),后续所有的时间操作,均以此时刻为基准。

继续查阅Date.java 方法

private transient long fastTime;

public Date() {
    this(System.currentTimeMillis());
}
public Date(long date) {
    fastTime = date;
}

转载于:https://my.oschina.net/u/3136014/blog/1570053

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

new Date() 方法到底是获取什么时间 的相关文章

随机推荐

  • animate css组合,Vue---CSS动画之animate.css库

    animation完成一个动画效果 代码基本结构搭建 使用与过渡动画相同的代码结构 hello world change var vm 61 new Vue el 39 root 39 data show true methods hand
  • P1661 扩散

    P1661 扩散 题目描述 一个点每过一个单位时间就会向四个方向扩散一个距离 xff0c 如图 两个点a b连通 xff0c 记作e a b 当且仅当a b的扩散区域有公共部分 连通块的定义是块内的任意两个点u v都必定存在路径e u a0
  • java 返回两个list_Java 获取两个List的交集和差集,以及应用场景操作

    背景介绍 在实际项目中 xff0c 特别是一些管理后台类的项目 xff0c 会遇到底层数据是按照一对多关系的数据表存储的管理界面 列表页是一对多关系中一对应的数据列表 xff0c 二级的详情页中是一对多关系中多对应的多条数据展示 通常二级页
  • 微服务注册中心注册表与hashcode实现golang版

    背景 基于负载均衡的服务调用 基于负载均衡的服务相互调用指的是通过基于Lvs Haproxy Nginx等负载均衡软件来构建一个负载均衡服务 xff0c 所有的服务调用都通过负载均衡器 从负载均衡的这种模式下其实有两个主要的问题 xff1a
  • cookie txt format

    2019独角兽企业重金招聘Python工程师标准 gt gt gt cookies txt Tab separated columns are Domain Only Sent To Creator Path Secure Expires
  • linux环境变量设置 profile,Linux 环境变量 设置 etc profile

    一 Linux的变量种类 按变量的生存周期来划分 xff0c Linux变量可分为两类 xff1a 1 永久的 xff1a 需要修改配置文件 xff0c 变量永久生效 2 临时的 xff1a 使用export命令声明即可 xff0c 变量在
  • Debian 7 桌面美化

    2019独角兽企业重金招聘Python工程师标准 gt gt gt 一 安装中文字体 1 文泉驿 查找 xff1a apt cache search wqy 可能输出如下信息 xff1a ttf wqy microhei A droid d
  • mysql编程展示数据_Mysql的列修改成行并显示数据的简单实现

    创建测试表 xff1a DROP TABLE IF EXISTS 96 test 96 CREATE TABLE 96 test 96 96 year 96 int 11 DEFAULT NULL 96 month 96 int 11 DE
  • LINUX:window下使用debian安装虚拟环境

    windows系统下 xff0c 使用debian做开发 xff0c 使用的是python编程语言 首先 xff0c 要安装pip 安装命令 xff1a apt install python3 pip 如果使用这个命令后出现如下错误提示 x
  • 如何“优雅地”进行Jetson nano 学习

    RT 其实就是面对多场景应用时 xff0c nano不可能待在同一个地方 xff0c 要么在车上 xff0c 在机器人上 我们扛着一 个大显示器到处跑肯定是不太现实的 xff0c 当然 xff0c 如果想要锻炼身体的同学另说 xff01 改
  • xmake入门,构建项目原来可以如此简单

    前言 在开发xmake之前 xff0c 我一直在使用gnumake makefile来维护个人C C 43 43 项目 xff0c 一开始还好 xff0c 然而等项目越来越庞大后 xff0c 维护起来就非常吃力了 xff0c 后续也用过一阵
  • haproxy负载均衡

    os xff1a root 64 node1 cat etc system release CentOS release 6 4 Final 参考文章 xff1a http www serverlab ca tutorials linux
  • 无线网络wifi (WPA/WPA2)密码破解方法

    无线网络password破解WPA WPA2教程 本教程用于探索无线路由安全漏洞 xff0c 禁止用于非法用途 xff0c 违者法律必究 xff08 与我无关 xff09 在动手破解WPA WPA2前 xff0c 应该先了解一下基础知识 x
  • 关于心跳ajax请求pending状态(被挂起),stalled时间过长的问题。涉及tcp连接异常。...

    环境 xff1a 景安快云服务器 xff08 听说很垃圾 xff0c 但是公司买的 xff0c 我也刚来 xff09 xff0c CentOS 6 8 x86 64 xff0c Apache xff0c MySQL5 1 xff0c PHP
  • 【遥感专题系列】微波遥感(三、SAR图像特征)

    SAR是主动式侧视雷达系统 xff0c 且成像几何属于斜距投影类型 因此SAR图像与光学图像在成像机理 几何特征 辐射特征等方面都有较大的区别 在进行SAR图像处理和应用前 xff0c 需要了解SAR图像的基本特征 本文主要包括 xff1a
  • Python可以用来做什么?这4个在平常生活中都可以用到

    Python是一个非常好用的程序语言 xff0c 开发的速度非常快 xff0c 你都知道Python可以用来做什么吗 xff1f 下面我将介绍几个简单的小程序 xff0c 你也可以试一试 xff01 1 网易云音乐批量下载 你可以利用Pyt
  • Next.js脚手架进阶 — 完美契合ant-design

    前言 上次入门完了之后感觉意犹未尽 xff0c 总觉得这个脚手架还是不太完美 xff0c 还有可以改进的地方 xff0c 所以为了与人方便也是与己方便 xff0c 就继续写几篇吧 xff5e xff0c 不过既然之前的叫做入门系列 xff0
  • Python实现“淘宝自动发货机器人”

    背景 之前看到朋友下载csdn资源 xff0c 但因为没有下载积分 xff0c 因此他会在淘宝上购买一个叫做 csdn资源代下 的业务 对我来说 xff0c 也许这是一个商机 xff08 因为刚好提交了一个csdn漏洞 xff0c 得到了一
  • Javascript定时器那些事儿

    一 什么是定时器 JS提供了一些原生方法来实现延时去执行某一段代码 xff0c 下面来简单介绍一下 setTimeout 设置一个定时器 xff0c 在定时器到期后执行一次函数或代码段 var timeoutId 61 window set
  • new Date() 方法到底是获取什么时间

    2019独角兽企业重金招聘Python工程师标准 gt gt gt 1 问题 java 中 xff0c new Date 方法 获取的时间 xff0c 究竟与当前的系统时间有什么关联 xff1f 简单的时刻对应关系吗 xff1f 2 测试环