三、Date类
1、概述:
表示的是从GMT(格林尼治标准时间)1970年, 1 月 1日00:00:00这一刻之前或者是之后经历的毫秒数.
java中默认的格式如:Sun Jan 18 10:17:58 CST 2013
这样的格式不容易看懂,而且不一定满足每个人的需求,那么就需要自定义格式,需要格式化日期模式。具体步骤:
1)创建Date对象
2)将模式封装到SimpleDateFormat对象中
3)调用format方法让模式格式化指定Date对象
下面给出完整的代码和注释:
import java.util.*; import java.text.*; class DateDemo { public static void main(String[] args) { Date d=new Date(); //打印的时间看不懂,希望有些格式 System.out.println(d); //将模式封装到SimpleDateFormat对象中 SimpleDateFormat sdf=new SimpleDateFormat("yyyy年MM月dd日E hh:mm:ss"); //调用formate方法让模式格式化指定的Date对象 String time=sdf.format(d); System.out.println("time="+time); } }
四、Calendar类
1、概述:
1)Calendar是一个抽象类,它为特定瞬间与一组诸如YEAR、MONTH、DAY_OF_MONTH等日历字段之间的转换提供了一些方法。
2)Calendar可以对年月日等时间进行获取。并提供了相应的子段值。具体的例子可参阅API文档。
2、方法:
2.1、基本获取时间
1)获取年份:Calendar.YEAR
2)获取月份:Calendar.MONTH
3)获取日期:Calendar.DAY_OF_MONTH
4)获取星期:Calendar.DAY_OF_WEEK
5)获取小时:Calendar.HOUR_OF_DAY
6)获取分钟:Calendar.MINUTE
7)获取秒数:Calendar.SECOND
2.2、设置时间:
1)为给定的日历字段添加或减去指定的时间值: ---> void add(int field,int amount);
2)获取指定的日历字段对应的时间值: ---> int get(int field);
3)将给定日历字段对应的时间值设置为给定值: ---> void set(int field,int value);
设置日历字段 YEAR、MONTH和DAY_OF_MONTH的值: ---> void set(int year,int month,int date);
3.用查表法打印出现在的日期:
import java.util.*; import java.text.*; class CalendarDemo { public static void main(String[] args) { Calendar c=Calendar.getInstance(); //查表法 String[] mons={"一月","二月","三月","四月", "五月","六月","七月","八月", "九月","十月","十一月","十二月"}; String[] weeks={"","星期日","星期一","星期二","星期三","星期四","星期五","星期六",}; int index=c.get(Calendar.MONTH); int index1=c.get(Calendar.DAY_OF_WEEK); sop(c.get(Calendar.YEAR)+"年"); //sop((c.get(Calendar.MONTH)+1)+"月"); sop(mons[index]); sop(c.get(Calendar.DAY_OF_MONTH)+"日"); //sop("星期"+c.get(Calendar.DAY_OF_WEEK)); sop(weeks[index1]); /* Date d=new Date(); SimpleDateFormat sdf=new SimpleDateFormat("yyyy"); String year=sdf.format(d); System.out.println(year); */ } public static void sop(Object obj) { System.out.println(obj); } }
练习:
1、获取任意年的二月有多少天:
2、获取前一天的现在这个时刻
3、计算有效上课天数,每周六日不上课,计算任意年从九月到十月的有效上课天数
import java.util.*; class CalendarTest { public static void sop(Object obj) { System.out.println(obj); } public static void main(String[] args) { //测试1 int n = getFEB(2012); sop("2012年2月的天数:" + n); //测试2 String s = getTheTime(); sop("昨天的现在这个时刻是:" + s); sop("-----------------"); //测试3 int m = getValDay(2013,1,3); sop("有效上课天数:" + m); } //测试1:创建获取二月的方法 public static int getFEB(int year) { Calendar c = Calendar.getInstance(); //设置任意年的时间为3月1号 c.set(year,2,1); //获取设置后的3月1日,并减去1天,即为二月最后一天 c.add(Calendar.DAY_OF_MONTH,-1); //获取最终设置的日期,即为获取到的二月的天数 int n = c.get(Calendar.DAY_OF_MONTH); return n; } //测试2:获取前一天的现在这个时刻 public static String getTheTime() { //获取时间信息 Calendar c = Calendar.getInstance(); //将日期设置为昨天 c.add(Calendar.DAY_OF_MONTH,-1); //获取昨天的现在这个时刻 int n = c.get(Calendar.DAY_OF_MONTH); return n + "日 " + c.get(Calendar.HOUR_OF_DAY) + ":" + c.get(Calendar.MINUTE) + ":" + c.get(Calendar.SECOND); } //测试3:计算有效上课天数 public static int getValDay(int year,int startMON,int endMON) { //获取时间信息 Calendar c = Calendar.getInstance(); //调用获取天数函数 int day = getDay(c,year,startMON,endMON); sop("总天数:" + day);//测试获取的天数 //初始化星期 int week = 0; //定义计数器 int count = 0; //遍历每天一天,判断是否为周六日,f否的话计数器自增 for(int i=0;i<day;i++) { //必须要先将天数加1再判断,否则到week为6的时候会一直continue, //而且此处也可以避免下面的week是以星期日为第一天的问题 c.add(Calendar.DAY_OF_MONTH,1); //获取当前天数的星期 week = c.get(Calendar.DAY_OF_WEEK); sop("星期:" + week); if (week==6 || week==7) continue; count++; sop("有效天数:" + count); } return count; } //获取给定月份的天数 public static int getDay(Calendar c,int year,int startMON,int endMON) { //定义天数和变量 int sum = 0; //遍历每个月的天数 for(int i=0;i<=endMON-startMON;i++) { //设定第二个月的第一天,循环一次后设定下个月为处世月,因为0为一月份所以startMON要加1 c.set(year,startMON+i,1); //获取前一个月的天数 c.add(Calendar.DAY_OF_MONTH,-1); //将每个月的天数累加 sum += c.get(Calendar.DAY_OF_MONTH); //循环后,要相应加上i个月 c.add(Calendar.MONTH,i+1); } return sum; } }
五、Math-Random类
1、概述:
Math类中全为静态方法,都是数学中的一些计算方法。
2、方法:
1)double ceil(double d) ---> 返回大于指定数据的最小整数
2)double floor(double d) ---> 返回小于指定数据的最大整数
3)double pow(double a,double b) ---> 返回a的b次方
4)double/float round(double/float m) ---> 返回m四舍五入的值
5)double random() ---> 返回正号的double值,是一个 0<=X<1.0 的随机数X
三、Random类
这是一个java.util中的一个单独的类,获取随机数。与Math中的random是一样的,不过这个类有自身的方法,可以将相应的随机数强转为指定基本数据类型。
如:int nextInt(int n)
下面给出一个完整的代码和注释例子:
import java.util.*; class MathDemo { public static void main(String[] args) { Random r=new Random(); for(int x=0;x<10;x++) { //int d=(int)(Math.random()*10+1); int d=r.nextInt(10)+1; sop(d); } show(); } public static void show() { //ceil方法的特点:返回大于指定数据的最小整数 double d=Math.ceil(12.34); //floor方法的特点:返回小于指定数据的最小整数 double d1=Math.floor(12.34); //四舍五入 long l=Math.round(12.34); sop("d="+d); sop("d1="+d1); sop("l="+l); //返回a的b次方 double d2=Math.pow(2,3); sop("d2="+d2); } public static void sop(Object obj) { System.out.println(obj); } }
练习:将某一小数保留为指定位数的小数
class MathDemo { public static void main(String[] args) { double d = round(16.6785,2); System.out.println("d = " + d); } //保留指定位数为n的小数 public static double round(double d,int n) { //将给定数扩大n倍后四舍五入,再缩小相应的倍数 return Math.round(d*(Math.pow(10,n)))/(Math.pow(10,n)); } }