一.Math类
- 来自于java.lang包
- Math数学工具类中,没有提供构造方法,Math中的常量和方法都是使用static修饰的
1.Math类中的静态常量
E : System.out.println(Math.E );
PI: System.out.println(Math.PI);2.Math类中的常用方法
(1)abs(int i): 重载方法,求一个数的绝对值
- 返回值类型 重载..
(2)ceil(double d): 将小数点全部进位,向上取整
- 返回值类型 double类型
(3)floor(double d): 将小数点全部舍掉,向下取整
- 返回值类型 double类型
(4)max(int a,int b): 重载方法,返回两个值的较大值
- 返回值类型 重载..
(5)min(int a,int b): 重载方法,返回两个值的较小值
- 返回值类型 重载..
(6)random(): 生成一个随机小数,[0.0,1.0)
- 返回值类型 double类型
(7)round(double d): 四舍五入
public class MathDemo {
public static void main(String[] args) {
mathEle();
mathMethod();
}
public static void mathEle(){
//math类中的静态常量
System.out.println(Math.E );//2.718281828459045
System.out.println(Math.PI);//3.141592653589793
}
public static void mathMethod(){
//1.abs();取绝对值
System.out.println(Math.abs(-3.14));
System.out.println(Math.abs(7));
//2.ceil();向上取整
System.out.println(Math.ceil(3.01));//4.0
System.out.println(Math.ceil(-5.5));//-5.0
//3.floor();向下取整
System.out.println(Math.floor(6.9));//6.0
System.out.println(Math.floor(-6.9));//-7.0
//4.max()、min()
System.out.println(Math.max(3,8));//8
System.out.println(Math.min(-5,-10));//-10
//5.random()
System.out.println(Math.random());//随机小数
//生成一个1-100的随机数
int x = (int)(Math.random()*100)+1;//随机小数可能取0
System.out.println(x);
//6.round()
System.out.println(Math.round(3.55));//4
System.out.println(Math.round(3.1));//3
}
}二.System类
- 来自于java.lang包,用于描述系统资源的
- System类中没有提供构造方法,类中常量和方法都时静态的
1.System类中的静态常量
in: 标准的输入流,默认关联键盘录入
举例:Scanner sc = new Scanner(System.in);
out:标准的输出流,默认将数据输出到控制台上
System.out.println() --> System:系统类、out:System中的常量,表示输出
- 返回值类型PrintStream打印流 Println()重载方法,可打印所有类型。
err:标准的错误流,是error的缩写,将代码运行时异常以及一些错误信息进行输出,以红色的字体进行显示
- 返回值类型PrintStream打印流
运行时异常:代码编译是没有错误,运行时异常2.System类中的常用方法
(1)gc(): 垃圾回收,但是内存和JVM有自己的内存回收机制,在合适的场景下,系统底层会自动的进行无用对象的垃圾回收。
(2)exit(int static): 停止虚拟机,代码不再运行
(3)currentTimeMillis(): 返回当前时间毫秒值,1000ms = 1s,java中默认的起始时间是1970年1月1日00:00:00 ->毫秒值为0
- 返回值类型 Long类型
public class SysytemDemo {
public static void main(String[] args) {
/*System.out.println(Integer.parseInt("abc"));编译不报错,运行时异常*/
//exit(0):正常停止虚拟机,代码都停止运行
System.out.println("helloword");
System.exit(0);
System.out.println("hello");
//currentTimeMillis(); 1970年1月1日00:00:00 --> 2020年3月17日的毫秒值
long a1 = System.currentTimeMillis();
System.out.println(a1);//1584439380771
int count = 0;
for (int i = 0; i < 10000; i++) {
count++;
count++;
}
long a2 = System.currentTimeMillis();
System.out.println("循环运行时间"+(a2-a1));//循环运行时间0、循环运行时间1 毫秒
}
} 三.Date类
1.Date类的概述
- 来自于java.util包,java.util包中的类,一般都是工具类
- 表示时间
2.Date类的构造方法
1.Date(): 表示一个日期类对象
2.Date(long time): 获取到指定毫秒值time对应的日期3.Date类的方法
需要创建对象使用
1.after(Date d): 测试此日期是否在指定日期之后
- 返回值类型 boolean类型
2.before(Date d): 测试此日期是否在指定日期之前
- 返回值类型 boolean类型
3.getTime(): 获取当前Date日期类对象的毫秒值,自1970年1月1日0点算起
- 返回值类型 long类型
4.setTime(): 将time对应的毫秒值,转换成日期类的对象
import java.util.Date;
public class DateDemo {
public static void main(String[] args) {
//1.有一些过时的方法,使用的时候,方法的上面有一条横杠,不是错误
// Date d1 = new Date("2020-3-17");
//2.Date(),空参构造
Date d2 = new Date();
System.out.println(d2);//Tue Mar 17 20:26:36 GMT+08:00 2020
//3.Date(long time) 获取到指定毫秒值time对应的日期
Date d3 = new Date(0);
System.out.println(d3);//Thu Jan 01 08:00:00 GMT+08:00 1970
//1.d2.after(d3)判断d2是否在参数d3日期之后
System.out.println(d2.after(d3));//true
//2.d2.before(d3)判断d2是否在参数d3日期之前
System.out.println(d2.before(d3));//false
//3.getTime() 获取当前Date日期类对象的 毫秒值,自1970年1月1日0点起
System.out.println(d2.getTime());//1584450396098
//4.setTime(long time) 将time对应的毫秒值,转换成一个日期类对象
d2.setTime(1584450396098L);
System.out.println(d2);//Tue Mar 17 21:06:36 GMT+08:00 2020
}
}四.DateFormat类
- 来自于java.text包
- DateFormat是一个抽象类,不能实例化对象,找到DateFormat子类SimpleDateFormat
- DateFormat功能:能进行时间或者日期的格式化,将时间或者日期转换成想要的格式
1.DateFormat类中的方法
1.format(Date d): 将一个日期对象转换成字符串
2.parse(String s): 将字符串s转换成日期对象2.SimpleDateFormat类的日期格式化
- Simpledateformat类,来自于java.text包
- 与语言无关的将一个日期或是时间进行解析或者是格式化
- 父类继承来的
1.format(Date d): 格式化,将一个日期对象转换成字符串
- 返回值类型 String类型
2.parse(String s): 解析,将字符串s转换成日期对象
- 返回值类型 Date类型3.SimpleDateFormat类的构造方法
1.SimpleDateFormat(): 空参构造,带有默认的日期的格式化类型:2020/3/18 下午8:20
2.SimpleDateFormat(String partten): 将日期或时间格式化成pattern的形式
日期的字符串表达方式pattern
y - 年
M - 月
d - 日
H - 时
m - 分
s - 秒
例如:SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy-MM-dd HH-mm-ss");
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
public class SimpleDateFormatDemo {
public static void main(String[] args) throws ParseException {////Add...添加异常说明
//createSimple();
getDate();
}
public static void createSimple(){
//1.空参构造,带有默认的日期的格式化类型:2020/3/18 下午8:20
SimpleDateFormat sdf1 = new SimpleDateFormat();//需要导包,java.text.SimpleDateFormat
String s1 = sdf1.format(new Date());//需要导包,java.util.Date
System.out.println(s1);
//2.有参构造,将日期或时间格式化成pattern的形式: 2020-03-19 08-44-03
SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy-MM-dd HH-mm-ss");//"yyyy年MM月dd日 HH:mm:ss" 斜杠也可
String s2 = sdf2.format(new Date());
System.out.println(s2);
}
public static void getDate() throws ParseException {//Add...添加异常说明
SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日");//若不写小时,默认为0
//1.parse(String s) : 将字符串s转换成一个日期对象,返回值类型Date类型
//注意:提供的String类型参数,必须与SimpleDateFormat构造方法中的字符串类型保持一致
//如果字符串无法转换成指定的日期类型,报错ParseException
Date d = sdf.parse("2020年03月19日");
System.out.println(d);//Thu Mar 19 00:00:00 GMT+08:00 2020
}
}练习:通过键盘录入一个自己的生日,计算今天是自己出生的第几天
分析:
1.自己生日 -> String类型
String -> 毫秒值
String -> Date(SimpleDateFormat parse() -> (Date getTime()) 拿到生日的毫秒值
2.获取今天日期对应的毫秒值
System.currentTimeMillis() 或 new Date().getTime()
3.两个毫秒值做差,最终需要天数,毫秒值/1000/60/60/24
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Scanner;
public class DateTest {
public static void main(String[] args) throws ParseException {
Scanner sc = new Scanner(System.in);
//1.输入一个生日
System.out.println("请输入生日(格式2020/03/19): ");
String birth = sc.next();
//2.将String类型的生日,转换成Date类型
SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd");
Date birthDate = sdf.parse(birth);
//3.将生日的Date类型转换成毫秒值
long birthTime = birthDate.getTime();
//4.将今天的日期转换成毫秒值
long nowTime = new Date().getTime();
//5.计算出生天数
int day= (int)((nowTime - birthTime)/1000/60/60/24);
System.out.println(day);
}
}五.Calendar类
1.Calendar类的介绍
- 来自java.util包,表示一个日历类
- 日历类,可以将日期中相关数据,单独获取到。例如:年份,天数,星期
- Calendar类是一个抽象类,不能创建对象
- Calendar中,getInstance(): 能获取到一个Calendar抽象类的一个子类对象
2.Calendar类中的get方法
- get(int field): 获取指定的日历字段值
3.Calendar类中的set方法
set(int field,int value): 将日历中的指定字段field,设置为指定的值value(单独设置年月日)
set(int year,int month,int date): 设置日历中的年月日
set(int year, int month, int date, int hourOfDay, int minute) :设置日历中的年月日小时分钟
set(int year, int month, int date, int hourOfDay, int minute, int second):设置日历中的年月日小时分钟秒4.Calendar类中的add方法
add(int field,int count):给日历类中的指定的字段field添加数值count
说明:如果添加后,field超出范围,进位。举例:现在是十月,添加五个月,要进位到年import java.util.Calendar;
public class CalendarDemo {
public static void main(String[] args) {
//1.getInstance()获取到一个Calendar的子类对象
//左边抽象父类,右边子类对象
Calendar cal = Calendar.getInstance();//多态的表现形式
System.out.println(cal);//打印一个日历类型
//getMethod();
//setMethod();
addMethod();
}
public static void getMethod(){
Calendar cal = Calendar.getInstance();
//获取指定的日历字段值
int year = cal.get(Calendar.YEAR);
System.out.println(year);//2020
int month = cal.get(Calendar.MONTH)+1;//国外是0-11月
System.out.println(month);
int day = cal.get(Calendar.DAY_OF_MONTH);
System.out.println(day);
int week = cal.get(Calendar.DAY_OF_WEEK)-1;//国外是周日为第一天
System.out.println(week);
int hour = cal.get(Calendar.HOUR_OF_DAY);
System.out.println(hour);
int minute = cal.get(Calendar.MINUTE);
System.out.println(minute);
int second = cal.get(Calendar.SECOND);
System.out.println(second);
}
public static void setMethod(){
Calendar cal = Calendar.getInstance();
cal.set(Calendar.YEAR,2005);
cal.set(Calendar.DAY_OF_MONTH,23);
System.out.println(cal.get(Calendar.YEAR) );//2005
System.out.println(cal.get(Calendar.DAY_OF_MONTH));//23
cal.set(2007,12,01);//日期超出范围,美国月份(0-11),自动进位,
System.out.println(cal.get(Calendar.YEAR));//2008
System.out.println(cal.get(Calendar.MONTH));//0
System.out.println(cal.get(Calendar.DAY_OF_MONTH));//1
cal.set(2011,06,02,9,22,33);
System.out.println(cal.get(Calendar.YEAR)+" "+cal.get(Calendar.MONTH)+" "+cal.get(Calendar.DAY_OF_MONTH));//2011 6 2
System.out.println(cal.get(Calendar.HOUR_OF_DAY)+" "+cal.get(Calendar.MINUTE)+" " +cal.get(Calendar.SECOND));//9 22 33
}
public static void addMethod(){
Calendar cal = Calendar.getInstance();//一创建,就获得了当前日期的一个对象
cal.add(Calendar.YEAR,-2);//2020-2 = 2018
System.out.println(cal.get(Calendar.YEAR));
cal.add(Calendar.MONTH,10);
System.out.println(cal.get(Calendar.YEAR));//2019
System.out.println(cal.get(Calendar.MONTH));//0
}
}练习1:键盘录入一个年份,通过月份判断这一年是平年还是闰年。(注意:平年的2月28天,闰年的2月29天)
分析:
输入年份 int 类型
设置一个Calendar日历类,设置年份为输入的年份,月份为1,日设置为28,
闰年29天,平年28天
日的上面添加一天,如果月份进位,平年。没有进位,闰年
import java.util.Calendar;
import java.util.Scanner;
public class CalendarYear {
public static void main(String[] args) {
//创建一个Calendar类对象
Calendar cal = Calendar.getInstance();
Scanner sc = new Scanner(System.in);
System.out.println("请输入年份: ");
//键盘录入的年份year以及2月28日,设置为日历数据
int year = sc.nextInt();
//没过0-11月,数据中的1月相当于中国的2月
cal.set(year,1,28);
//将日期做+1的动作
cal.add(Calendar.DAY_OF_MONTH,1);//日+1
//如果进位为三月,平年。没有进位仍然为2月,闰年
int month = cal.get(Calendar.MONTH);
if(month ==2){
System.out.println("平年");
}else{
System.out.println("闰年");
}
}
}练习,代码实现以下需求:
(1)通过键盘录入日期字符串,格式(2015-10-25)
(2)输出该日期是星期几及这一年的第几天
(3)如输入:2015-10-20. 输出 "2015年-10月-20日 是星期2,是 2015年的第 293天"
分析:将年月日,星期,一年中的天数都单独的获取到,Calendar类可以做到
String ----> Date(SimpleDateFormat) ----> 毫秒值 ----> Calendar
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.Scanner;
public class HomeWork2 {
public static void main(String[] args) throws ParseException {
//1.键盘录入,获取字符串日期
Scanner sc = new Scanner(System.in);
System.out.println("请输入一个日期,yyyy-MM-dd形式");
String date = sc.next();
//2.将String类型日期转换为Date类型,通过SimpleDateFormat类
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
Date da= sdf.parse(date);//SimpleDateFormat将String类型转为Date类型
//3.将Date日期类型转化成毫秒值
long hm = da.getTime();
//4.将毫秒值转换成Calendar类型
Calendar cal = Calendar.getInstance();//创建一个Calendar对象
cal.setTimeInMillis(hm);//用给定的 long 值设置此 Calendar 的当前时间值
//5.将需要的日期字段类型获取到
int year = cal.get(Calendar.YEAR);
int Month = cal.get(Calendar.MONTH)+1;
int day = cal.get(Calendar.DAY_OF_MONTH);
int week = cal.get(Calendar.DAY_OF_WEEK)-1;
int dayOfYear = cal.get(Calendar.DAY_OF_YEAR);
System.out.println(year+"年-"+Month+"月-"+day+"日 是星期"+week+",是 "+year+"年的第 "+dayOfYear+"天");//2015年-10月-20日 是星期2,是 2015年的第 293天
}
}