Java 經常使用API (第二部分)

 

經常使用api第二部分

Date 類

import java.util.Date;java

 

時間原點: 1970-01-01 00:00:00(英國格林威治)api

中國屬於東八區, 會把時間增長 8 個小時: 1970-01-01 08:00:00數組

unix 時間戳是指離時間原點的毫秒值app

 

使用 Date 類獲取當前 unix 時間戳:ui

// 獲取當前unix時間戳
import java.util.Date;

public class Main {
    public static void main(String[] args){
        Date d = new Date();
        long i = d.getTime();
        System.out.println(i);  // 1571926743797
    }
}

 

把時間戳轉換爲日期時間:spa

// 把時間戳轉換爲日期時間
import java.util.Date;

public class Main {
    public static void main(String[] args){
        Date d = new Date(1571926743797L);
        System.out.println(d); // Thu Oct 24 22:19:03 CST 2019
    }
}

 

DateFormat 類

import java.text.DateFormat;unix

DateFormat 是一個抽象類code

 

import java.text.SimpleDateFormat;orm

SimpleDateFormat 是實現的非抽象子類對象

 

將 Date 類型格式化爲指定模式的字符串:

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

public class Main {
    public static void main(String[] args) {
        SimpleDateFormat sd =  new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        String dateStr = sd.format(new Date());
        System.out.println(dateStr);  // 2019-10-24 22:37:28
    }
}

 

將字符串解析爲 Date 類型:

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

public class Main {
    public static void main(String[] args) throws ParseException {  // 解析可能會發生異常
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        Date d = sdf.parse("2019-10-24 22:37:28");
        System.out.println(d);  // Thu Oct 24 22:37:28 CST 2019
    }
}

 

小練習: 計算一我的活了多少天 ?

步驟: 

  1. 使用 Scanner 獲取出生日期
  2. 使用 SimpleDateFormat 解析成 Date 類型
  3. 轉化爲毫秒值
  4. 使用當前 Date 毫秒值減去出生日期毫秒值
  5. 把毫秒值轉換爲單位: 天
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Scanner;

public class Main {
    public static void main(String[] args) throws ParseException {
        // 獲取出生日期字符串
        Scanner s = new Scanner(System.in);
        s.useDelimiter("\n");   // 使用換行來判斷用戶輸入完成
        String birthday = s.next();

        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        // 求毫秒差
        long currentTimestamp = new Date().getTime();
        long birthdayTimestamp = sdf.parse(birthday).getTime();
        long difference =  currentTimestamp - birthdayTimestamp;
        // 轉換爲天
        int ret = (int) (difference / 1000 / 60 / 60 / 24);
        System.out.println(String.format("你活了多少天呢?  %d", ret));  // 8842
    }
}

 

Calendar 類

import java.util.Calendar;

Calendar 是抽象類

 

經常使用成員方法:

  1. 返回當前的日期時間的Date對象

    • public Date getTime()

  2. 將給定的日期時間字段設置爲給定值

    • public void set(int field, int value)

  3. 根據日曆的規則, 爲給定的日曆字段添加或者減去指定的時間量(例如獲取前N天的時間, 前N秒的日期時間, 很是方便) (正數爲加, 負數爲減)

    • public abstract void add(int field, int amount)

  4. 獲取日曆字段的值

    • public int get(int field)

 

demo: 

import java.util.Calendar;
import java.util.Date;

public class Main {
    public static void main(String[] args) {
        Calendar c = Calendar.getInstance();  // 直接獲取對象, 多態寫法

        // 獲取當前時間
        Date currentTime = c.getTime();

        // 設置年份
        c.set(Calendar.YEAR, 9999);

        // 獲取年份
        int year = c.get(Calendar.YEAR);
        System.out.println(year);  // 9999

        // 更改月份
        c.add(Calendar.MONTH, 2);
        // 查看更改的月份
        System.out.println(c.get(Calendar.MONTH));  // 西方月份是 0-11, 中國是 1-12
    }
}

 

System 類

java.lang.System

它提供了不少的靜態方法, 使用類名直接調用

  1. 返回當前時間的unix時間戳 (可用於統計程序運行耗時)
  2. arraycopy
    public static native void arraycopy(Object src,  int  srcPos, Object dest, int destPos, int length);
    

      

統計程序耗時:

public class Main {
    public static void main(String[] args) throws InterruptedException {
        long startTime = System.currentTimeMillis();
        Thread.sleep(1000);
        long endTime = System.currentTimeMillis();
        System.out.println(endTime - startTime);  // 1001
    }
}

 

arraycopy:

import java.util.Arrays;

public class Main {
    public static void main(String[] args) {
        int[] src = {1,2,3,4};
        int[] dest = {5,6,7,8};

        System.arraycopy(src, 0, dest,0, 3);  //  替換3個, 元素少於3個報錯
        System.out.println(Arrays.toString(dest)); // [1, 2, 3, 8]
    }
}

 

StringBuilder 類

java.lang.StringBuilder

StringBuilder 是一個字符串緩衝區; 在內存裏邊始終是一個 byte[] 數組, 佔用空間少, 操做效率高

StringBuilder 是可變對象, 用來高效拼接字符串

StringBuilder 能夠支持鏈式操做, 實現鏈式操做的關鍵是返回實例自己

 

經常使用成員方法: 

  1. append (可添加任意類型數據的字符串形式)
  2. toString (StringBuilder 和 String 能夠互相轉換)

 

字符串的高效拼接

public class Main {
    public static void main(String[] args) {
        StringBuilder bu = new StringBuilder();
        // 鏈式調用
        bu.append("abc")
                .append(123)
                .append(true)
                .append(0.999)
                .append('a');
        System.out.println(bu.toString();
    }
}

 

StringBuilder 和 String 之間的相互轉換

// StringBuilder 和 String 之間的相互轉換
public class Main {
    public static void main(String[] args) {
        StringBuilder bu = new StringBuilder("abc");  // 使用不一樣的構造方法
        System.out.println(bu.getClass());  // class java.lang.StringBuilder
        //
        String str = bu.toString();
        System.out.println(str.getClass());  // class java.lang.String
    }
}

 

包裝類

用類來包裝基本類型, 方便操做基本類型數據

基本類型 對應的包裝類(java.lang)
byte Byte
short Short
int Integer
long Long
float Float
double Double
char Character
boolean Boolean

 

成員方法:

  1. valueOf() 裝箱

  2. intValue() 拆箱

 

demo: 

public class Main {
    public static void main(String[] args) {
        // 裝箱
        // Integer ig = new Integer("123456");
        Integer ig = Integer.valueOf("123456");
        // 拆箱
        int i = ig.intValue();
        System.out.println(i);   // 123456

        // 自動裝箱, 拆箱
        Integer ig2 = 123456;
        int i2 = ig2;
    }
}

 

 

ending ~

相關文章
相關標籤/搜索