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); //
}
}
把时间戳转换为日期时间:
// 把时间戳转换为日期时间
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
}
}
小练习: 计算一个人活了多少天 ?
步骤:
- 使用 Scanner 获取出生日期
- 使用 SimpleDateFormat 解析成 Date 类型
- 转化为毫秒值
- 使用当前 Date 毫秒值减去出生日期毫秒值
- 把毫秒值转换为单位: 天
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)); //
}
}
Calendar 类
import java.util.Calendar;
Calendar 是抽象类
常用成员方法:
返回当前的日期时间的Date对象
public Date getTime()
将给定的日期时间字段设置为给定值
public void set(int field, int value)
根据日历的规则, 为给定的日历字段添加或者减去指定的时间量(例如获取前N天的时间, 前N秒的日期时间, 非常方便) (正数为加, 负数为减)
public abstract void add(int field, int amount)
获取日历字段的值
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
它提供了很多的静态方法, 使用类名直接调用
- 返回当前时间的unix时间戳 (可用于统计程序运行耗时)
- 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); //
}
}
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 可以支持链式操作, 实现链式操作的关键是返回实例本身
常用成员方法:
- append (可添加任意类型数据的字符串形式)
- 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 |
成员方法:
valueOf() 装箱
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 ~
Java 常用API (第二部分)的更多相关文章
- Java 常用API(一)
目录 Java 常用API(一) 1. Scanner类 引用类型的一般使用步骤 Scanner的使用步骤 例题 2. 匿名对象 概述 匿名对象作为方法的参数 匿名对象作为方法的返回值 3. Rand ...
- Java 常用API(二)
目录 Java 常用API(二) 1. Object类 2. Date类 概述 构造方法和成员方法 3. DateFormat类 概述 SimpleDateFormat类 练习 4. Calendar ...
- Java常用API(Math类)
Java常用API(Math类) Math类的作用 java.lang.Math 类包含用于执行基本数学运算的方法,如初等指数.对数.平方根和三角函数.类似这样的工具 类,其所有方法均为静态方法,并且 ...
- Java常用API(Arrays类)
Java常用API(Arrays类) 什么是Arrays类? java.util.Arrays 此类包含用来操作数组的各种方法,比如排序和搜索等.其所有方法均为静态方法,调用起来 非常简单. 这里我们 ...
- Java常用API(String类)
Java常用API(String类) 概述: java.lang.String 类代表字符串.Java程序中所有的字符串文字(例如 "abc" )都可以被看作是实现此类的实例 1. ...
- Java常用API(ArrayList类)
Java常用API(ArrayList类) 我们为什么要使用ArrayList类? 为了更加方便的储存对象,因为使用普通的数组来存储对象太过麻烦了,因为数组的一个很大的弱点就是长度从一开始就固定了,所 ...
- Java常用API(Random类)
Java常用API(Random类) Random:是一个用于生成随机数的类 构造方法 public Random() :创建一个新的随机数生成器. 返回随机数的方法 public int nextI ...
- Java常用API(Scanner类)
Java常用API( Scanner类)1 1.Scanner类 首先给大家介绍一下什么是JavaAPI API(Application Programming Interface),应用程序编程接口 ...
- java基础3.0:Java常用API
本篇介绍Java基础中常用API使用,当然只是简单介绍,围绕重要知识点引入,巩固开发知识,深入了解每个API的使用,查看JavaAPI文档是必不可少的. 一.java.lang包下的API Java常 ...
随机推荐
- #C++初学记录(动态规划 被3整除的子序列)
原题:牛客网 动态规划dynamic programming 的入门级题目 题目描述 : 给你一个长度为50的数字串,问你有多少个子序列构成的数字可以被3整除 答案对1e9+7取模 输入描述: 输入一 ...
- SSL 安全协议 以及 如何认证
目录 ssl安全协议 以及 认证 什么是协议 http劫持 ssl是什么 ssl 证书 概念 3种类型ssl 证书 ssl认证:阿里云免费认证 配置 Nginx的ssl认证 nginx的ssl证书(一 ...
- Python高级笔记(十一)装饰器【面试】
1. 需求 开发封闭原则:虽然在这个原则是用的面向对象开发,但是也适用于函数式编程,简单来说,它规定已经实现的功能代码不允许被修改,但可以被拓展,即: 封闭:已实现的功能代码块 开发:对拓展开发 2. ...
- UIView的intrinsicContentSize方法,在按钮中重写
场景,一个有图片有文字的按钮在其父控件上加了上左的约束,然后,有需要要调整按钮与图片之间的间距,第一想法就是设置title insets 的left. 然后问题出现了,这个按钮的文字居然显示不全了,也 ...
- LODOP一个任务多列,只打一列如何维护
打印维护是针对整个任务进行维护的,打印多少个打印项就要维护多少个打印项,维护了多少打印项,就要打印多少内容.但是打印的时候不需要打印其他列,可以把其他列的数值传入空置,add_print_text纯文 ...
- [LeetCode] 399. Evaluate Division 求除法表达式的值
Equations are given in the format A / B = k, where A and B are variables represented as strings, and ...
- [LeetCode] 495. Teemo Attacking 提莫攻击
In LOL world, there is a hero called Teemo and his attacking can make his enemy Ashe be in poisoned ...
- 多线程、线程池、线程创建、Thread
转载自https://www.cnblogs.com/jmsjh/p/7762034.html 多线程 1.1 多线程介绍 学习多线程之前,我们先要了解几个关于多线程有关的概念. 进程:进程指正在运行 ...
- linux:使用python脚本监控某个进程是否存在(不使用crontab)
背景: 需要每天定时去检测crontab进程是否启动,所以不能用crontab来启动检测脚本了,直接使用while 循环和sleep方式实现定时检测 # coding:utf-8 import os ...
- Rufus软件
Rufus软件(https://rufus.akeo.ie/)——制作启动盘必备,简易且开源.