java中的时间

news2024/11/17 7:37:37

一、JDK7的类
(1)Date 时间
(2)SimpleDateFormat 格式化时间
(3)Calendar 日历
格林尼治时间(Greenwich Mean Time),简称GMT。
目前的世界标准时间(UTC)以替换为原子钟(根据铯原子的振动频率计算)。
中国标准时间=世界标准时间+8小时。
时间单位换算:
1秒= 1000毫秒
1毫秒= 1000微妙
1微妙=1000纳秒

1.Date类
先介绍System类,System类是一个工具类,提供了一些与系统相关的方法。
在这里插入图片描述
System的currentTimeMillis()方法返回当前系统的时间毫秒值形式。计算机中的时间原点为1970年1月1日00:00:00.中国(东八区)的时间原点为1970年1月1日08:00:00.currentTimeMillis()方法的返回值是指从时间原点开始到现在经过的毫秒的值。
例如,输出当前时间与时间原点之间的经过的毫秒值:
在这里插入图片描述
再例如,比较不同判断质数的方法执行的时间:

public class Test2 {
    public static void main(String[] args) {
        long start = System.currentTimeMillis();
        int number1 = 0;
        for (int i = 0; i < 10000; i++) {
           boolean flag =  isPrime1(i);
           if(flag){
               number1++;
           }
        }
        long end = System.currentTimeMillis();
        System.out.println("isPrime1()运行时间为"+(end-start)+"毫秒");
        long start2 = System.currentTimeMillis();
        int number2 = 0;
        for (int i = 0; i < 10000; i++) {
            boolean flag =  isPrime2(i);
            if(flag){
              number2++;
            }
        }
        long end2 = System.currentTimeMillis();
        System.out.println("isPrime2()运行时间为"+(end2-start2)+"毫秒");
    }
    public static boolean isPrime1(int number){
        for (int i = 2; i < number; i++) {
            if(number%i == 0){
                return false;
            }
        }
        return true;
    }
    public static boolean isPrime2(int number){
        for (int i = 2; i <= Math.sqrt(number); i++) {
            if(number%i == 0){
                return false;
            }
        }
        return true;
    }

}

运行结果如下:
在这里插入图片描述
接着介绍Date类,Date类也是通过毫秒值计算时间,Date类用来描述时间,精确到毫秒。利用空参构造创建的对象,默认表示系统当前时间;利用有参构造创建的对象,表示指定的时间。查看Date类的源码:
在这里插入图片描述
在这里插入图片描述
例如:
在这里插入图片描述
输出的不是毫秒值,那时因为Date类重写了toString()方法:
在这里插入图片描述
再例如,利用有参构造获取时间原点:
在这里插入图片描述
再例如,使用setTime()方法修改时间,参数为long类型,作用等同于有参构造方法:
在这里插入图片描述
再例如,使用getTime()获取Date对象记录的时间的毫秒值:
在这里插入图片描述
2.SimpleDateFormat
Date类只能按照默认的格式进行打印(重写的toString())。
在这里插入图片描述
构造方法:
在这里插入图片描述
成员方法:
在这里插入图片描述
有参构造的pattern:
在这里插入图片描述
例子:
在这里插入图片描述
例如,默认格式与多种自定义格式:

public class Test2 {
    public static void main(String[] args) {
        //1.利用空参构造创建SimpleDateFormat对象,默认格式
        SimpleDateFormat sdf1 = new SimpleDateFormat();
        Date d1 = new Date(0L);
        String str1 = sdf1.format(d1);
        System.out.println(str1);

        //2.利用带参构造创建SimpleDateFormat对象,指定格式
        SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");
        String str2 = sdf2.format(d1);
        System.out.println(str2);

        // 3.利用带参构造创建SimpleDateFormat对象,指定格式,使用E显示星期
               SimpleDateFormat sdf3 = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss E");
                String str3 = sdf3.format(d1);
              System.out.println(str3);

    }
}

运行结果如下:
在这里插入图片描述
再例如,parse()方法解析字符串生成Date对象:
在这里插入图片描述
注意:使用有参构造创建SimpleDateFormat对象中的模式要与字符串中的模式一致。
3.Calendar
Calendar代表了系统当前时间的日历对象,可以单独修改、获取时间中的年月日,避免了使用毫秒值计算的麻烦。
细节:Calendar是一个抽象类,不能直接创建对象。获取Calendar日历类对象的方法:
在这里插入图片描述
在这里插入图片描述
Calendar.getInstance()获取日历对象,底层是根据系统的不同时区来获取不同的日历对象会把时间中的纪元,年,月,日,时,分秒,星期等等都放到一个数组当中。细节:
(1)数组中的月份范围为0~11,如果取出来的是0,那么实际上是1月。
(2)星期的范围为1~7,1表示星期日,2表示星期一,以此类推。
例如:
在这里插入图片描述
再例:

public class Test2 {
                public static void main(String[] args) throws ParseException {
                    //1.获取日历对象,底层是根据系统的不同时区来获取不同的日历对象
                    //会把时间中的纪元,年,月,日,时,分秒,星期等等都放到一个数组当中
                    Calendar c = Calendar.getInstance();
                    System.out.println(c);

                    //2.修改日历代表的时间
                    Date d = new Date(0L);
                    c.setTime(d);
                    System.out.println(d);

            //根据get()方法获取Calendar底层数组中保存的不同值
            //0表示纪元,1表示年,2表示月,3表示一年中的第几周,4表示一个月中的第几周,5表示一个月中的第几天(日期)
            int year =  c.get(1);//也可以写成int year = c.get(Calendar.YEAR);
        int month =  c.get(2)+1;//月份要加1
        int date =  c.get(5);
        System.out.println(year+","+month+","+date);

        //set修改数组中的某一个字段
        c.set(Calendar.YEAR,2000);//把年份改为2000年
        System.out.println(c);

        //add修改某字段加或减
        c.add(Calendar.YEAR, 1);//年份加一
        System.out.println(c);
        c.add(Calendar.YEAR, -2);//年份减二
        System.out.println(c);
    }
}

运行结果:
在这里插入图片描述
在这里插入图片描述
二、JDK8的类
JDK8新增的时间相关类相对于JDK7来说具有两个层面的好处。
(1)代码层面:JDK7代码写起来比较麻烦,JDK8代码写起来比较简单;
(2)安全层面:JDK7的时间相关类在多线程环境下可能会导致数据安全的问题,例如多个线程修改同一个时间类对象。JDK8解决了这一问题,JDK8的时间日期对象都是不可变的,如果想修改时间,原来对象的时间不会改变,而是返回一个新的对象。
JDK7的时间相关类需要学习是因为在一些老的项目中使用了,而现在的项目都是用JDK8的时间相关类。
JDK8的时间相关类:
在这里插入图片描述
注意上图中的横线上的类是JDK7的类,上图展示了JDK7的时间相关类与JDK8的时间相关类之间的关系。
1.ZoneId时区
Java定义时区的格式是“洲名/城市名”或“国家名/城市名”。
在这里插入图片描述
例如:

public class Test2 {
                public static void main(String[] args) throws ParseException {
                    //1.获取所有时区
                    Set<String> zoneIds = ZoneId.getAvailableZoneIds();
                    System.out.println(zoneIds.size());
                    System.out.println(zoneIds);

                    //2.获取当前系统的默认时区Asia/shanghai
                    ZoneId zoneId = ZoneId.systemDefault();
                    System.out.println(zoneId);

                    //3.获取指定的时区,字符串属于所有时区中的一个
                   ZoneId zoneId1= ZoneId.of("Asia/Pontianak");
                    System.out.println(zoneId1);




    }
}

运行结果如下:
在这里插入图片描述
2.Instant时间戳
在这里插入图片描述
说明:上图中的标准时间是指格林尼治的时间,比中国晚8小时。

public class Test2 {
                public static void main(String[] args) throws ParseException {
                //1.获取当前时间的Instance对象(标准时间)
                    System.out.println("1============");
                 Instant now = Instant.now();
                    System.out.println(now);

                    System.out.println("2============");
                    //2.根据(秒/毫秒/纳秒)获取Instance对象
                   Instant instant1= Instant.ofEpochMilli(0L);//根据毫秒获取对象
                    System.out.println(instant1);
                    Instant instant2 = Instant.ofEpochSecond(1L);//根据秒获取对象
                    System.out.println(instant2);
                    Instant instant3 = Instant.ofEpochSecond(1L,1000000000L);//根据秒加上纳秒获取对象,1秒+1000 000 000秒等于2秒
                    System.out.println(instant3);


                    //3.指定获取指定时区的时间
                    System.out.println("3============");
                  ZonedDateTime time =   Instant.now().atZone(ZoneId.of("Asia/Shanghai"));
                    System.out.println(time);

                    System.out.println("4============");
                    //4.判断两个时间的先后
                    Instant instant4 = Instant.ofEpochMilli(0L);
                    Instant instant5 = Instant.ofEpochMilli(1000L);
                    boolean result1 = instant4.isBefore(instant5);//判断instant4代表的时间是否在instant5之前
                    System.out.println(result1);
                    System.out.println(instant4.isAfter(instant5));

                    System.out.println("4============");
                    //增减时间,注意JDK8增减时间原时间类对象不变,增减的结果为函数返回值
                    Instant instant6= Instant.ofEpochMilli(3000L);
                    System.out.println(instant6);
                    Instant instant7 = instant6.minusMillis(1);//减一秒



    }
}

运行结果:
在这里插入图片描述
3.ZonedDateTime带时区的时间
在这里插入图片描述

public class Test2 {
                public static void main(String[] args) throws ParseException {
                    System.out.println("1=========");
               //1.获取当前时间对象(带时区)
                    ZonedDateTime now = ZonedDateTime.now();
                    System.out.println(now);

                    System.out.println("2=========");
                    //2.获取指定的时间对象(带时区)
                    //年月日时分秒的方式指定
                    ZonedDateTime time1 = ZonedDateTime.of(2023,10,1,11,12,12,0,ZoneId.of("Asia/Shanghai"));
                    System.out.println(time1);

                    System.out.println("3=========");
                    //3.withxxx修改时间系列的方法
                    ZonedDateTime time3 = time1.withYear(2000);
                    System.out.println(time3);

                    System.out.println("4=========");
                    //4.减少时间
                    ZonedDateTime time4 = time1.minusYears(2000);
                    System.out.println(time4);

                    System.out.println("5=========");
                    //5.增加时间
                    ZonedDateTime time5 = time1.plusYears(2000);
                    System.out.println(time5);

                }
}

运行结果:
在这里插入图片描述
4.DateTimeFormatter日期格式化类
成员方法:
在这里插入图片描述

public class Test2 {
                public static void main(String[] args) throws ParseException {
                    //获取时间对象
                    ZonedDateTime time = Instant.now().atZone(ZoneId.of("Asia/Shanghai"));
                    //解析/格式化器
                    DateTimeFormatter dtf1 = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss E a");
                    //格式化
                    System.out.println(dtf1.format(time));
                }
}

运行结果:
在这里插入图片描述
5.LocalDate、LacalTime、LocalDateTime
在这里插入图片描述
三者之间进行转化的方法:
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/655089.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

C++的友元函数、友元类、内部类

目录 1.友元函数 1.定义 2.注意 2.友元类 1.定义 3.内部类&#xff08;Java喜欢用&#xff0c;C不怎么用&#xff09; 1.定义 特性&#xff1a; 1.友元函数 1.定义 1.友元函数可访问类的私有和保护成员&#xff0c;但不是类的成员函数。 2.友元函数不能const修饰 3.…

Rust语言从入门到入坑——(4)Rust语法(上)

文章目录 0 引入1、基础语法1.1、变量1.2、常量1.3、重影 2、数据类型2.1、整形2.2、浮点型2.3、其他2.注释与打印2.1 注释2.2、打印 3、总结 0 引入 在这里我们需要介绍Rust语法&#xff0c;一共分三部分&#xff0c;第一部分是基础语言&#xff0c;和C语言类比&#xff0c;如…

从零构建后端项目-创建SpringBoot项目配置MyBatis

目录 主体介绍 创建SpringBoot项目主要步骤 配置MyBatis 整合高级功能 创建SpringBoot项目 配置Tomcat 配置MySQL数据源 配置Redis数据源 配置MongoDB数据源 运行项目&#xff0c;检测配置 配置MyBatis 创建IDEA数据库连接 生成MyBatis各种文件 配置MyBatis 配…

总结902

目标规划&#xff1a; 月目标&#xff1a;6月&#xff08;线性代数强化9讲&#xff0c;考研核心词过三遍&#xff09; 周目标&#xff1a;线性代数强化5讲&#xff0c;英语背3篇文章并回诵&#xff0c;检测 每日规划 今日已做 1.背诵前21篇短文&#xff0c;默写了10篇文章。…

智能视频无损放大-Topaz Video AI

今天给各位小伙伴们测试了一款可以使视频智能无损放大的软件——Topaz Video AI。 小编在很早之前也有了解过Topaz系列的软件&#xff0c;都是通过人工智能处理的&#xff0c;对小白新手们很适用&#xff0c;由于使用人工智能方面的软件或程序对硬件要求都比较高&#xff0c;因…

离散数学题目收集整理练习(期末过关进度70%)

✨博主&#xff1a;命运之光 &#x1f984;专栏&#xff1a;离散数学考前复习&#xff08;知识点题&#xff09; &#x1f353;专栏&#xff1a;概率论期末速成&#xff08;一套卷&#xff09; &#x1f433;专栏&#xff1a;数字电路考前复习 &#x1f31f;博主的其他文章&…

Linux运维监控学习笔记2

Zabbix监控本机&#xff1a; 配置->主机->将Zabbix Server的状态开启。 然后我们还需要在这台机器上安装agent。agent安装在被监控端&#xff0c;收集数据&#xff0c;与监控服务器交互。 # 列出系统上面所有软件名称 rpm -qa |grep zabbix-agent zabbix-agent-3.4.15-…

hello算法笔记之栈与队列

一、栈 遵循先入后出&#xff08;First In, Last Out&#xff09;原则的线性数据结构。 只能在栈顶添加或删除元素 链表实现形式&#xff1a; ①栈以链表形式实现&#xff1a; ②以数组形式实现 二、队列 遵循先入先出&#xff08;First In, First Out&#xff09;规则的线…

使用WinDbg分析Windows dump文件方法

需要使用WinDbg工具来分析windows系统产生的dump文件&#xff0c;此工具属于Windows SDK的一个组件&#xff0c;在微软官方网站可以下载&#xff08;链接&#xff09;。 在安装Windows SDK的过程中&#xff0c;可以选择只安装WinDbg&#xff08;Debugging Tools for Windows&a…

数据结构——图

文章目录 **一 图的基本概念****1 定义** **二 图的存储及基本操作****1 邻接矩阵法****2 邻接表法****3 十字链表****4 邻接多重表****5 图的基本操作** **三 图的遍历****1 广度优先搜索BFS****2 深度优先搜索DFS****3 图的遍历与连通性** **四 图的应用****1 最小生成树****…

源码编译安装LAMP

文章目录 一.Apache1.什么是apache2.apache的主要特点3.apache的软件版本4.编译安装优点 二.LAMP简介与概述1.LAMP平台概述2.构建LAMP平台顺序3.各组件的主要作用 三.LAMPDISCUZ论坛搭建1.部署Apache1.1 下载apache相关安装包放入服务器中1.2 解压apache的安装进行安装1.3 编译…

SF授权系统源码 V3.7全开源无加密版本

&#x1f389; 有需要的朋友记得关赞评&#xff0c;文章底部来交流&#xff01;&#xff01;&#xff01; &#x1f389; ✨ 源码介绍 2023全新SF授权系统源码 V3.7全开源无加密版本。网站搭建很简单&#xff0c;大致看来一下应该域名解析后上传源码解压&#xff0c;访问域名/i…

如何构建LAMP平台:Apache,MySQL,PHP

如何构建LAMP平台&#xff1a;Apache&#xff0c;MySQL&#xff0c;PHP 一、Apache网站服务&#xff1a;1. Apache的起源&#xff08;多系统兼容&#xff09;&#xff1a;2.重要特点&#xff1a;3.软件版本&#xff1a;4.编译安装呢http服务器&#xff1a; 二、LAMP简介与概述&…

家中群晖NAS遇到断电如何自动关机

群晖NAS遇到断电时如何自动关机 前置条件实现功能的想法具体实施的步骤开启群晖Linux的SSH登陆安装Putty或是Xshell远程登陆上群晖创建计划任务 前置条件 需要一台UPS&#xff08;品牌功能不限&#xff0c;只需续航5分钟以上就可以&#xff09; 实现功能的想法 通过监控网卡…

【备战秋招】每日一题:4月8日美团春招第二题:题面+题目思路 + C++/python/js/Go/java带注释

为了更好的阅读体检&#xff0c;为了更好的阅读体检&#xff0c;&#xff0c;可以查看我的算法学习博客第二题-必经之路 在线评测链接:P1167 题目内容 塔子哥的班主任最近组织了一次户外拓展活动&#xff0c;让班里的同学们一起去爬山。在路上&#xff0c;塔子哥看到了一棵漂…

Windows7 环境下的 Python 版本如何选取?

背景 我需要在不连接互联网的 Windows7 办公电脑上为网页版的办公系统开发一个自动化工具&#xff0c;可以将日常琐碎的操作替代掉。 基本确定了通过 PythonSelenium 的方式来实现网页自动化功能。 首先我需要配置开发环境&#xff0c;安装 Python、VS Code、导入Selenium库、…

提高 React 性能的技巧

1.解决重复渲染问题 我们大多数人都知道虚拟 DOM 是如何工作的&#xff0c;但最重要的是检测何时触发树比较。当我们可以跟踪它时&#xff0c;我们可以控制组件的重新渲染&#xff0c;并最终防止意外的性能流。令人惊讶的是&#xff0c;它并不难捕捉。首先&#xff0c;将 Reac…

uniapp APP端在线升级功能实现讲解——强制或可选升级,下载进度显示

文章目录 概要 需求分析 技术实现梳理 1.是否更新判断&#xff1a; 2.升级弹窗的展示 3.根据升级类型限制操作 4.下载APP监听下载进度 5.下载完自动安装 核心API讲解 1.plus.downloader.createDownload(url,options,completedCallback)&#xff08;下载&#xff09; 2.plus.r…

使用SOCKET搭建linux和window实现实时摄像头传输(linux传输win端使用C++mfc显示)--Win端开发

1.使用MFC搭建框架 配置: Window10VS2013opencv249 如果VS和opencv配置不一样&#xff0c;让版本对应 Opencv与VS版本 1.1 MFC项目搭建 通过这些步骤就创建了一个MFC基础项目。 1.2项目属性配置 本项目因为要使用opencv,所以就要配置以下opencv的环境 首先在opencv官网下载…

手机连接adb 相关问题汇总

目录 关于端口占用问题1 关于修改adb 端口配置问题2 方法3 方法4 关于端口占用问题1 转载链接&#xff1a;https://www.jianshu.com/p/902a89b06271 报错信息&#xff1a; error: no device/emulators found error: device still connecting 解决方案&#xff1a; 重启…