Java 常用API (第二部分)

常用api第二部分

Date 类

import java.util.Date;

时间原点: 1970-01-01 00:00:00(英国格林威治)

中国属于东八区, 会把时间增加 8 个小时: 1970-01-01 08:00:00

unix 时间戳是指离时间原点的毫秒值

 

使用 Date 类获取当前 unix 时间戳:

// 获取当前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
    }
}

把时间戳转换为日期时间:

// 把时间戳转换为日期时间
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;

DateFormat 是一个抽象类

import java.text.SimpleDateFormat;

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("
");   // 使用换行来判断用户输入完成
        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 ~

每天都要遇到更好的自己.
原文地址:https://www.cnblogs.com/kaichenkai/p/11798217.html