常用类(二)
今天讲的是日期时间类
时间戳的意思是:距离特定时间的时间间隔,特定时间是有规定的:1970年1月1日 00:00:00,系统重装的时候也可以看见1970年1月1日 8:00:00:000
时间戳就是距离1970年1月1日 00点00分00秒000毫秒的时间间隔
比如今天计算机上显示的是2019年4月29日 14点14分00秒,那他的时间间隔是非常大的,时间间隔是用毫秒来表示的,用long类型来存储的
时间是一个整型。
小知识:格林尼治时间(GMT)为世界时间标准,因为格林尼治时间的正午经过英国那里的本初子午线,因为我们是中国,位于东八区,所以要加上8小时,这是地理问题。
1.Date(此类有很多过时的东西,但是没过时的依旧可以使用)
Date:特定的瞬间,精确到毫秒。
Date 类本质上拥有一个long fastTime属性的包装类,提供了很多属性和方法用于快速获取年月日、时分秒。而fastTime就是时间戳
创建Date对象的时候记得是util;
写日期的时候yyyy是年,MM是月份,dd是天数,HH是小时,mm是分钟,ss是秒。
Calendar
因为Date本身有很多方法在JDK1.1后已经过时了,所以推荐常使用Calendar取代Date获取单独的年月日时分秒。
他是一个日历类,本质上内部里有一个属性,叫:long time ,他表示的是该日历所具体的时间戳,同时Calendar内部通过对time 的运算计算出很多日历字段,把这些日历字段存在一个容器中,并提供set和get方法给人设置或者访问这些字段
案例:获取Calendar中的日历字符值
// 通过工厂设计模式构建一个对象
Calendar cal = Calendar.getInstance();
System.out.println(cal.toString());
// 获取年
System.out.println(cal.get(Calendar.YEAR));
// 获取月,索引从0开始,0-表示1月
System.out.println(cal.get(Calendar.MONTH));
System.out.println(cal.get(Calendar.DAY_OF_MONTH));
// 时
System.out.println(cal.get(Calendar.HOUR_OF_DAY));
// 分
System.out.println(cal.get(Calendar.MINUTE));
// 秒
System.out.println(cal.get(Calendar.SECOND));
System.out.println(cal.get(Calendar.MILLISECOND));
// 获取星期 一周的第一天是周日开始
System.out.println(cal.get(Calendar.DAY_OF_WEEK));
// 本月的第一天和本月的最后一天
System.out.println(cal.getActualMinimum(Calendar.DAY_OF_MONTH));
System.out.println(cal.getActualMaximum(Calendar.DAY_OF_MONTH));
2.Math
Math 类包含用于执行基本数学运算的方法。例如,随机数、平方、立方。
里面的PI 等于数学里的π
经常用Math是弄一些绝对值(函数为abs)
System.out.println("Math.abs(-10)");
向上取整(函数为ceil)/ 向下取整(函数为floor)
system.out.println(Math.ceil(10.1));
这个用的是向上取整的函数,结果是10.1变成了10.0,因为是取最小整数,所以得这样的结果
如果是用向下取整,取的是最大整数,把代码换成floor就可以了。
时间比大小
max(大)和min(小)
system.out.println(Math.max(10.20));
就谁大,想比小就换函数成min。
pow(x,y) x的y次方(函数为pow)
System.out.println(Math.pow(2, 3));
四舍五入(函数为round)
System.out.println(Math.round(4.4));
3.枚举(挺重要的)
枚举是由一组固定的常量,常量,常量组成的类型,自定义数据类型,因为是自定义类型,所以可以声明变量
平时是这样弄
【修饰符】 enum enumName{
常量值1.
常量值2,
常量值3
。。。
常量值N ;(注释:分号加不加无所谓,建议加,多了没毛病)
}
枚举的常量值呢,一定要是可以列举的有限值,常量值类型都默认为public static final
比如你用定义了男和女的一个枚举类型
你想用gender来声明变量,那么变量的值必须是枚举值里的其中一个,比如你弄了男和女,那么你输入的时候只能输男和女
其实直接把枚举当成一个类 , 会更好理解一些,因为java中所有的枚举类型都继承与enum类
枚举转化成字符串
Gender gender = Gender.男;
system.out.println(gender.tostring( ));
如果字符串要转化成枚举值
Gender gender = Gender.男;
String str = “男”;
但是可能会产生非法参数异常,也就是IllegalArgumentException
gender gender2 = Enum.valueOf(Gender.class, string);
System.out.println(gender2);
4.
枚举和switch
public enum Week {
MONDAY,
TUESDAY,
WEDNESDAY,
THURSDAY,
FRIDAY,
SATURDAY,
SUNDAY;
}
public static void main(String[] args) {
// 需求:有一个变量表示星期几,输出对于的教学安排
Week week = Week.TUESDAY;
switch (week) {
case MONDAY:
case TUESDAY:
case THURSDAY:
case FRIDAY:
case SATURDAY:{
System.out.println("上课");
break;
}
case WEDNESDAY:
case SUNDAY:{
System.out.println("练习");
break;
}
}
}
枚举的其他方法
public static void main(String[] args) {
// 枚举变量的其他方法
Week week = Week.SUNDAY;
System.out.println(week.name());
System.out.println(week.ordinal());
}
总结
1.只能够取特定值中的一个
2.使用enum关键字
3.所有的枚举类型隐性地继承自 java.lang.Enum。(枚举实质上还是类!而每个被枚举的成员实质就是一个枚举类型的实例,他们默认都是public static final的。可以直接通过枚举类型名直接使用它们。)
4.强烈建议当你需要定义一组常量时,使用枚举类型