Java常用API之:Date(DateFormat, Calendar),System,StringBuilder

1. Java提供了java.util.Date类,来处理时间,日期。由于其大部分构造器已过时,不再推荐使用,剩下两个常用的构造器:

      ①Date(): 生成一个代表当前系统时间的Date对象;

      ②Date(long date): 根据指定的long类型的参数生成一个Date对象。该构造器参数表示创建的Date对象与时间原点(1970年1月1日,0时分秒)之间的时间差,参数单位为 “毫秒”。

ivate static void method() {
        // 获取系统当前时间
        Date date = new Date();
        /*
          直接打印:  Mon Sep 10 16:07:47 CST 2018
         */
        System.out.println(date);

        /*
            Java的时间原点 :1970年1月1号 0时分秒(GMT: 0经度线)

         */
        // 获取从时间原点到1000ms的时间
        Date date1 = new Date(1000L);
        System.out.println(date1);
    }

关于Date的方法,大部分也已经过时了,常用到的:

     ①getTime();  获取 从时间原点到现在的毫秒值

long time = date.getTime();

     ②setTime(long time); 设置时间

// 时间原点后两秒
date.setTime(2000);
System.out.println(date);

2.  由于Date生成的时间(如:Thu Jan 01 08:00:02 CST 1970)非专业人士难以阅读,而人们输入的日期(如:2018-09-09;2018/09/09等)计算机又不认识,所以Java提供了 java.text.SimpleDateFormat这个类解决这一问题,顾名思义,SimpleDateFormat即为简单的时间格式化。

     SimpleDateFormat是DateFormat的一个子类,常用方法:

      ①format(Date date);将系统时间格式化;

       

        Date date = new Date();
        System.out.println(date);
        //格式化 我们看的懂的格式 ->  xx 年X月X日  X时X分X秒
        //                      ->  xx -X-X-  X:X:X;
        //                      ->  xx/X/X  X时X分X秒
        //格式还有很多种,根据需求定义
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日,HH时mm分ss秒");
        String format = sdf.format(date);
        System.out.println(format);

      ②parse(String time);将字符串格式化为系统时间;

 public static void main(String[] args) throws ParseException {
      
        //给定一个String类型的时间
        String time = "2019-09-10";
        //参数要与给定的时间格式相同,否则会抛出ParseException
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
        //抛出异常
        Date parse = sdf.parse(time);
        System.out.println(parse);

    }

      下面通过一个例子总结一下时间类:

        例:你活了多少天?

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Scanner;

/*

    思路:
        1. 获取你的生日 (String) -> Date -> getTime

        2. 获取系统当前时间  new Date().getTime();

        3. 当前时间 - 你的生日 (毫秒值)

 */
public class LiveDayDemo {

    public static void main(String[] args) throws ParseException {
//1. 获取你的生日 (String) -> Date -> getTime
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入你的生日(yyyy-MM-dd):");

        String birthString = sc.nextLine();

        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
        Date birthDate = sdf.parse(birthString);
        long birthTime = birthDate.getTime();

        //2. 获取系统当前时间  new Date().getTime();
        long currentTime = new Date().getTime();

        //3. 当前时间 - 你的生日 (毫秒值)
        long day = (currentTime - birthTime) / 1000 / 3600 / 24;
        System.out.println("你活了" + day + "天");


    }
}

3.  java.util.Calendar 类是一个抽象类,它为特定瞬间与一组诸如 YEAR、MONTH、DAY_OF_MONTH、HOUR 等 日历字段之间的转换提供了一些方法, 并为操作日历字段(例如获得下星期的日期)提供了一些方法。

     Calendar 提供了一个静态方法(不用创建对象,节约资源),可以直接获取当地日历。

private static void method() {
    /*
        这个根据系统信息获取当地的日历
     */
        Calendar c = Calendar.getInstance();
        System.out.println(c);
    }

      但这样获取的信息非常多,所以Calendar提供了get();方法获取具体的日历,参数为Calendar提供的很多常量值,其他的可自行查阅

private static void method2() {
        Calendar c = Calendar.getInstance();
        //c.getYear();  获取年份,可以替换为下面的方式
        int year = c.get(Calendar.YEAR);
        // 获取u也分,获取的是0--11月,不符合实际生活,所以+1
        int month = c.get(Calendar.MONTH) + 1;
        //获取天(几号)
        int day = c.get(Calendar.DAY_OF_MONTH);
        System.out.println(year + "-" + month + "-" + day);
    }

      Calendar提供了时间设置,以获取这个时间的相关日历信息,同构一个例子说明: 

      判断2018年2月14日是星期几

      

Calendar calendar = Calendar.getInstance();
/*      
        //c.setYear(2018);
        c.set(Calendar.YEAR,2018);
        c.set(Calendar.MONTH,2);
        c.set(Calendar.DAY_OF_MONTH,14);
        可用下面的set方法直接设置
*/
calendar.set(2018,2,14);
//接收获取的星期数
int i = 0;
//西方一周的第一天为星期日
if (calendar.get(Calendar.DAY_OF_WEEK) == 1){
    i = 7;
} else {
    i = calendar.get(Calendar.DAY_OF_WEEK) -1;
}

String day = "";
switch (i){
    case 1: day = "星期一";
        break;
    case 2: day = "星期二";
        break;
    case 3: day = "星期三";
        break;
    case 4: day = "星期四";
        break;
    case 5: day = "星期五";
        break;
    case 6: day = "星期六";
        break;
    case 7: day = "星期日";
        break;
}

System.out.println(day);

          Calendar还提供了时间添加(在时间后添加x天)

     Calendar c = Calendar.getInstance();
        // 在 天数添加 30天
        c.add(Calendar.DAY_OF_MONTH,30);

        int year = c.get(Calendar.YEAR);
        int month = c.get(Calendar.MONTH) + 1; // 0 ~11
        int day = c.get(Calendar.DAY_OF_MONTH);

        System.out.println(year + "-" + month + "-" + day);

4. System 类 : 系统类

      1. final 修饰 不让继承

      2. 私有化构造,不让实例化

      3. 所有属性和方法都是static

      System从一开始接触Java就已经接触到:System.out.println    System.in等

      除此之外System的方法还有:

      ①currentTimeMillis();获取当前系统时间与时间原点的毫秒数

     

//获取系统时间毫秒值
        long time = System.currentTimeMillis();//10ms
        System.out.println(time);

       而 new Date().getTime() 的底层正是这个:所以可以直接使用currentTimeMillis方法获取,效率更高。

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

     ②arraycopy(); 顾名思义为数组拷贝;

 /*        参数含义
         * @param      src      源数组
         * @param      srcPos   源数组起始位置
         * @param      dest     目标数组
         * @param      destPos  目标数组的起始位置
         * @param      length    被复制的元素个数
         */
        int[] src = {1,2,3,4,5};
        int[] dest = {6,7,8,9,0};
        System.arraycopy(src,2,dest,0,3);

        System.out.println(Arrays.toString(dest)); //[3, 4, 5, 9, 0]

       例子:现有一个字符数组{'e','r','r','o','a'},请使用System类中的arraycopy()方法在控制台输出“error”.

char[] array1 = {'e','r','r','o','a'};
System.arraycopy(array1,1, array1,array1.length-1,1);
System.out.println(array1);

5. StringBuilder:

        Stirng 被final修饰,所以本身不可变,每次对String进行操作,都会产生很多新的对象(过程对象),很浪费资源,影响效率...StringBuilder继承自 AbstractStringBuilder,每个对象有的一定的缓冲区,在缓冲区范围内操作,不会产生新(临时)的对象。

       StringBuilder拼接字符串可用append("...")拼接,

StringBuilder append = sb.append("1").append(2).append("3").append(4).append(5).append(6);
        System.out.println(append);

      通过一个例子可以直接证明为什么要用StringBuilder:

      例:分别使用String的+=和StringBuilder的append方法对字符串做100000次拼接,计算String拼接100000次花费时间与StringBuilder拼接100000次所花费时间并打印。    

猜你喜欢

转载自blog.csdn.net/weixin_38816084/article/details/82620084