三、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);
}
}
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);
}
}
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;
}
}
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);
}
}
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));
}
}
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));
}
}