来自 Web前端 2020-04-29 17:43 的文章
当前位置: 网上澳门金莎娱乐 > Web前端 > 正文

JS计算时间差

时间: 2019-09-08阅读: 1317标签: 时间getTime()方法方法定义: getTime() 方法可返回距 1970 年 1 月 1 日之间的毫秒数。

本节介绍一下java中那些常用的类,包括:系统相关类(System、Runtime)、日期时间类(Date等)、Object、Math、Random、File、枚举类(Enum)

通常我们计算时间差都是通过获取两个时间数据,然后分别使用getTime()方法返回与固定的1970 年 1 月 1 日的时间差,通过对返回毫秒数的差,换算成时间单位,得出两个时间的时间差。

1.系统相关类

  • #### System类

    • System类是一些与系统相关的属性和方法的集合,且System类中所有的属性和方法都是静态的,要想引用这些属性和方法,直接使用System类调用即可。
    • System类的构造方法是private修饰的,所以不能创建该类的实例对象,但是可以通过类名直接调用。
    • System类还被final关键字修饰,所以不能被继承。

  1.System类的成员变量

  • in:标准输入流(键盘输入),InputStream类型
  • out:标准输出流(显示器输出),PrintStream类型
  • err:标准错误输出流(显示器输出),PrintStream类型

    1 System.out.println("hello world");

   2.System类的成员方法

  • getProperty方法:获取系统的属性信息,常见的属性名以及属性说明如下表所示
属性名 属性说明
java.version jdk版本
java.home jdk安装目录
os.name 操作系统名称
os.version 操作系统版本
user.home 用户宿主目录
user.name 用户名称
user.dir 当前工作目录

 代码示例:

1         System.out.println("jdk版本:"+System.getProperty("java.version"));
2         System.out.println("操作系统:"+System.getProperty("os.name"));
3         System.out.println("用户:"+System.getProperty("user.name"));
4         System.out.println("用户目录:"+System.getProperty("user.home"));
5         System.out.println("当前工作目录:"+System.getProperty("user.dir"));             
  • currentTimeMillis方法:获取当前的计算机时间,时间的表达格式为当前计算机时间和GMT时间(格林威治时间)1970年1月1号0时0分0秒所差的毫秒数。

    1 Long ctime = System.currentTimeMillis(); 2 System.out.println("系统当前时间:"+ctime);//系统当前时间:1509009739936

  • arraycopy方法:进行数组拷贝,也就是将一个数组中的内容复制到另外一个数组中的指定位置,由于该方法是native方法,所以性能上比使用循环高效。(ArrayList的插入和删除操作就是调用System类的arraycopy方法实现的

    1 //将数组按指定要求进行复制 2 char[] a = {'A','B','C','D'}; 3 char[] b = {'1','2','3','4','5'}; 4 / 5 将原数组a从第1个索引开始复制到目标数组b的第2个索引开始的位置,一共复制2个元素 6 即是将a[1]复制给b[2],a[2]复制给b[3],所以最终为1 2 B C 5 7 / 8 System.arraycopy(a, 1, b, 2, 2); 9 for (int i = 0; i < b.length; i++) { 10 System.out.print(b[i]+" "); 11 }//1 2 B C 5

  • gc方法:请求系统进行垃圾回收,相当于给GC加上了优先级。至于系统是否立刻回收,则取决于系统中垃圾回收算法的实现以及系统执行时的情况,这个方法只是对Runtime类中的gc方法进行了一次包装。

    1 //请求垃圾回收 2 System.gc();

  • exit方法:退出程序,其中status的值为0代表正常退出,非零代表异常退出。使用该方法可以在图形界面编程中实现程序的退出功能等。

  • #### Runtime类

 这里首先给出Runtime类的一些总结:

  • Runtime类封装了程序运行时的环境,每个java应用程序都有一个Runtime类的实例,使得应用程序能够与运行时的环境相连接。
  • 和System类一样,不能创建Runtime类的实例对象(构造方法私有的),但是能够通过getRuntime静态方法获取该对象的一个引用。
  • 一旦得到了一个当前Runtime类的引用,就可以通过调用Runtime对象的成员方法来控制JVM的状态和行为。

 1.Runtime类的内存管理

Runtime类代表了java程序的运行环境,通过Runtime类可以访问JVM的相关信息,如处理器数量、内存信息等等。另外还有Runtime类的gc方法,通知JVM进行垃圾回收,这是一个native方法,由C语言实现。

1     //获取java程序关联的运行时对象
2     Runtime runtime = Runtime.getRuntime();
3     
4     System.out.println("处理器数量:"+runtime.availableProcessors());
5     System.out.println("空闲内存数:"+runtime.freeMemory());
6     System.out.println("总内存数:"+runtime.totalMemory());
7     System.out.println("最大可用内存数:"+runtime.maxMemory());

2.Runtime类执行其他程序

除了能够获取JVM的信息之外,Runtime类还可以直接单独启动一条进程来运行操作系统的命令,主要调用exec这个成员方法来实现。

  • exec方法返回一个Process对象,可以使用这个对象来控制java程序与新运行的进程来进行交互操作。
  • exec方法的本质是依赖于环境。
  • Runtime提供了系列exec方法来运行操作系统的命令,关于它们的用法和差别可以查阅API文档。

    1 //获取java程序关联的运行时对象 2 Runtime runtime = Runtime.getRuntime(); 3 4 //运行记事本程序 5 runtime.exec("notepad.exe");

开始操作:首先你会有一串初始的时间数据,然后通过 new Date(你的时间数据),将你的数据转成Date对象的形式。

 2.日期时间类

java提供了一系列用于处理日期、时间的类,包括创建日期、时间对象,获取系统当前日期、时间等的操作。

  • #### Date类

java提供了Date类来处理日期和时间,这里介绍的是java.util包下的Date类,而不是java.sql包下的Date类。由于这个Date类的历史悠久,所以大部分构造器、成员方法已经失效,这里先介绍它未失效的两个构造器:

  1. Date():生成一个代表当前日期时间的Date对象,该方法实际是调用System类的currentTimeMillis()方法获取long型的整数作为日期参数。
  2. Date(long Date):根据指定的long型整数来生成一个Date对象。创建的对象是从1970年01月01日00时(格林威治时间)开始以毫秒计算时间,计算 millisec 毫秒。

由于Date类的大部分成员方法也失效了,这里介绍一些还未失效的方法:

  1. boolean after(Date when):测试该日期是否在指定日期when之后。
  2. boolean before(Date when):测试该日期是否在指定日期when之前。
  3. int compareTo(Date anotherDate):比较两个日期的大小,后面的时间大于前面的时间时返回-1,否则返回1。
  4. boolean equals(Object obj):比较两个时间是否相同,当表示同一时刻时返回true。
  5. long getTime():返回该时间对应的long型整数,一个毫秒值。
  6. void setDate(long time):设置Date对象的时间。

    1 Date date = new Date(); 2 System.out.println(date);//Mon Oct 30 15:09:54 CST 2017 3 System.out.println(date.getTime());//1509347462950 4
    5 Date d1 = new Date(10000); 6 Date d2 = new Date(20000); 7 System.out.println(d1.before(d2));//true 8 System.out.println(d1.compareTo(d2));//-1 9
    10 date.setTime(100000000); 11 System.out.println(date);//Fri Jan 02 11:46:40 CST 1970

 Date对象的格式化可以采用SimpleDateFormat这个类的format(Date date)方法,具体代码示例如下:

1         Date date = new Date();
2         SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");    
3         System.out.println(simpleDateFormat.format(date));//2017/10/30 15:15:48
  • #### Calendar类

因为Date类在设计上的一些缺陷,所以java提供了Calendar类来更好地处理日期和时间。Calendar是一个抽象类,所以不能创建一个Calendar类的实例对象,但是可以通过getInstance静态方法获得。这里介绍一些Calendar类常用的操作:

  1. getInstance():获取Calendar的实例对象。
  2. get():获取calendar对象的日期和时间信息。
  3. set():设置日期和时间。
  4. getTimeInMillis():获取时间的毫秒级数据。
  5. 此外还介绍了一些日期时间格式化、计算时间差的方法。

    1 //通过getInstance()方法获得Calendar的实例对象 2 Calendar calendar = Calendar.getInstance(); 3
    4 / 5 网上澳门金莎娱乐, 通过calendar对象获取日期和时间信息 6 注意:Calendar类中年份的数值直接书写,月份的值为实际的月份值减1,日期的值就是实际的日期值。 7 / 8 System.out.println(calendar.get(calendar.YEAR));//年 9 System.out.println(calendar.get(calendar.MONTH)+1);//月 10 System.out.println(calendar.get(calendar.DAY_OF_MONTH));//日 11 System.out.println(calendar.get(calendar.HOUR_OF_DAY));//时 12 System.out.println(calendar.get(calendar.MINUTE));//分 13 System.out.println(calendar.get(calendar.SECOND));//秒 14
    15 //设置日期和时间 16 calendar.set(2017, 11, 10, 15, 30, 20); 17
    18 /利用SimpleDateFormat进行格式化 19 注意:此处format方法传入的参数为一个Date对象,所以需要调用calendar对象的getTime方法以获取一个Date对象 20 / 21 System.out.println(new SimpleDateFormat("yyyy/MM/dd HH:mm:ss").format(calendar.getTime()));//2017/12/10 15:30:20 22
    23 /
    24 计算时间差: 25 通过调用calendar类的getTimeInMillis方法,计算毫秒级的时间差,再进行换算得到所需的时间差格式 26 / 27 Calendar startCalendar = Calendar.getInstance(); 28 startCalendar.set(2017, 6, 1, 12, 30, 50);//起始时间为2017/7/1 12:30:50 29 Calendar endCalendar = Calendar.getInstance();//结束时间为当前时间 30 long deltaTime = endCalendar.getTimeInMillis() - startCalendar.getTimeInMillis() ; 31 //直接输出毫秒级的时间差 32 System.out.println(deltaTime); 33 //换算成天数的时间差 34 System.out.println(deltaTime/(10003600*24));

 

下一节将介绍剩下的几个常用类。

 

var t1="2017/08/28 04:56:38"; //数据var dateBegin = new Date(t1);//转化为Date对象的形式//Mon Aug 28 2017 04:56:38 GMT+0800 (中国标准时间) 这里就是Date对象的数据形式

时间格式

这里的话就要注意一下后端给的时间数据格式的问题,比如下面两种:

第一种:"2017/08/28 04:56:38"//这种格式不用再进行处理第二种:"2017-08-01 18:56:38"//这种格式就要进行处理

因为new Date()方法不能处理第二种数据,所以我们这里需要将第二种数据格式转化为第一种数据的格式。

let t1="2017-05-12 00:13:53";let dateBegin = new Date(d1.replace(/-/g, "/"));//replace方法将-转为/

本文由网上澳门金莎娱乐发布于Web前端,转载请注明出处:JS计算时间差

关键词: