JavaSE核心之一:Date类、Calendar类、Math类、枚举;
1.Date类
1) java.util.Date类用于封装日期及时间信息,一般仅用它显示某个日期,不对他作任何操作处理,作处理用Calendar类,计算方便。
2) Date 类本质上拥有一个long fastTime属性的包装类,提供了很多属性和方法用于快速获取年月日、时分秒。而fastTime就是时间戳。
1 import java.util.Date; 2 3 public class Test1 { 4 public static void main(String[] args) { 5 // 查看当前系统平台时区、环境等的时间 6 Date _date = new Date(); 7 System.out.println(_date); 8 9 //获取_date的时间戳,计算机时间戳是指距离历元(1970-01-01 00:00:00:000)的时间间隔(ms) ; 10 long _time = _date.getTime(); 11 System.out.println(_time);//输出1556540877266 ,(是该时间距离 历元 经过的毫秒数) 12 13 //通过时间戳创建Date对象 14 long ftime = 0; 15 Date _date2 = new Date(ftime); 16 System.out.println(_date2);//输出Thu Jan 01 08:00:00 CST 1970; 17 18 } 19 20 }
3) 日期的格式化,把Date对象格式化成特定的字符串;
1 import java.text.SimpleDateFormat; 2 import java.util.Date; 3 4 public class test3 { 5 public static void main(String[] args) { 6 Date _date = new Date(); 7 System.out.println(_date);//输出Date对象时间 Mon Apr 29 21:29:38 CST 2019 8 9 //日期格式化->字符串 10 SimpleDateFormat datef = new SimpleDateFormat(); 11 12 //这是日期格式化为字符串的默认的模式和语言环境 13 14 String dateStr = datef.format(_date); 15 System.out.println(dateStr);//输出19-4-29 下午9:28 16 17 //使用指定模式格式化 ; 例如格式化成:xxxx年xx月xx日 xx时xx分xx秒 18 19 SimpleDateFormat datef2 = new SimpleDateFormat("yyyy年MM月dd日 HH时mm分ss秒"); 20 String dateStr2 = datef2.format(_date); 21 System.out.println(dateStr2);//输出2019年04月29日 21时44分26秒 22 23 //还可以修改此模式 例如修改为yyyy-MM-dd模式 24 datef2.applyPattern("yyyy-MM-dd"); 25 String dateStr3 = datef2.format(_date); 26 System.out.println(dateStr3);//输出2019-04-29 27 28 29 } 30 31 }
把特定的字符串转为Date对象
1 import java.text.ParseException; 2 import java.text.SimpleDateFormat; 3 import java.util.Date; 4 5 public class Test4 { 6 public static void main(String[] args) { 7 //将特定字符串转化为对象Date; 8 String str = "2019-04-29"; 9 10 SimpleDateFormat datef = new SimpleDateFormat("yyyy-MM-dd"); 11 //把子串>>>Date 12 13 try { 14 Date _date = datef.parse(str); 15 System.out.println(_date); 16 } catch (ParseException e) { 17 18 e.printStackTrace(); 19 } 20 21 } 22 23 }
4) 需求:构建一个未来3天的当前的时间;
1 import java.text.SimpleDateFormat; 2 import java.util.Date; 3 4 public class Test2 { 5 public static void main(String[] args) { 6 //创建一个Date对象,表示当前平台的时间 7 Date _date = new Date(); 8 //输出当前时间 9 System.out.println(_date.toString()); 10 SimpleDateFormat datef1 = new SimpleDateFormat("yyyy年MM月dd日"); 11 String dateStr1 = datef1.format(_date); 12 System.out.println(dateStr1);//输出2019年04月29日 13 14 15 //需求:构建一个未来3天的当前的时间 16 long ftime = 3*24*3600*1000 + _date.getTime();//加未来3天,3乘24小时 17 Date _date2 = new Date(ftime); 18 System.out.println(_date2.toString());//输出Date对象时间 19 20 //转化为特定的字符串 xxxx年xx月xx日样式 21 SimpleDateFormat datef = new SimpleDateFormat("yyyy年MM月dd日"); 22 String dateStr = datef.format(_date2); 23 System.out.println(dateStr);//输出2019年05月02日 24 25 } 26 27 }
2. Calendar类
1)java.util.Calendar类用于封装日历信息,其主作用在于其方法可以对时间分量进行运算。
通过Calendar的静态方法获取一个实例该方法会根据当前系统所在地区来自行决定时区,帮我们创建Calendar实例,这里要注意,实际上根据不同的地区,Calendar有若干个子类实现。而Calendar本身是抽象类,不能被实例化的。
2) 日历类所解决的根本问题是简化日期的计算,要想表示某个日期还应该使用Date类描述。Calendar是可以将其描述的时间转化为Date的,我们只需要调用其getTime()方法就可以获取描述的日期的Date对象了。
3) 通过日历类计算时间:为日历类设置时间,日历类设置时间使用通用方法set。set(int field,int value),field为时间分量,Calendar提供了相应的常量值,value为对应的值。
4) 只有月份从0开始:0为1月,以此类推,11为12月,其他时间是正常的从1开始。也可以使用Calendar的常量calendar.NOVEMBER……等。
1 Calendar.DAY_OF_MONTH 月里边的天---号; 2 Calendar.DAY_OF_WEEK 星期里的天---星期几 3 Calendar.DAY_OF_YEAR 年里的天
1 Calendar calendar=Calendar.getInstance();//构造出来表示当前时间的日历类 2 Date now=calendar.getTime();//获取日历所描述的日期 3 calendar.set(Calendar.YEAR, 2012);//设置日历表示2012年 4 calendar.set(Calendar.DAY_OF_MONTH,15);//设置日历表示15号 5 calendar.add(Calendar.DAY_OF_YEAR, 22);//想得到22天以后是哪天 6 calendar.add(Calendar.DAY_OF_YEAR, -5);//5天以前是哪天 7 calendar.add(Calendar.MONTH, 1);得到1个月后是哪天 8 System.out.println(calendar.getTime());
6)获取当前日历表示的日期中的某个时间单位可以使用get方法。
1 int year=calendar.get(Calendar.YEAR); 2 int month=calendar.get(Calendar.MONTH); 3 int day=calendar.get(Calendar.DAY_OF_MONTH); 4 System.out.println(year+"年"+(month+1)+"月"+day+"日");//month要处理
3.Math类
1)Math 类包含用于执行基本数学运算的方法。例如:随机数、平方、立方等等数学运算。
1 // 常用属性 2 System.out.println(Math.PI);//圆周率π的值 3 4 System.out.println(Math.abs(-10));//输出10;(绝对值 -10的绝对值是10) 5 6 System.out.println(Math.ceil(10.1));//输出10.0;ceil:返回比10.1大的最小整数>>> 向上取整 反之floor是向下取整; 7 8 System.out.println(Math.max(10, 20));//输出20;max取最大值,反之min取最小值; 9 10 System.out.println(Math.round(4.4)); 输出5;round: 四舍五入; 11 12 System.out.println(Math.toDegrees(Math.PI/2));// 把弧度转化成角度 13 14 System.out.println(Math.toRadians(180));// 把角度转化成弧度 15 16 System.out.println(Math.sin(Math.toRadians(30)));// (C)sin(a)/cos(a)/tan(a)
4.枚举
1)枚举是由一组固定的常量组成的类型,自定义数据类型。
语法:
1 [修饰符] enum enumName{ 2 常量值1, 3 常量值2, 4 常量值3… 5 6 常量值n[;] 7 } 8 9 //案例: 10 public enum Gender { 11 男, 12 女, 13 保密; 14 }
java中所有的枚举类型都继承于Enum类。可以把枚举类型看出一个类。