300 likes | 610 Views
第 6 章 时间、日期和数字. Date 类. Date 类在 java.util 包中。 Date 类构造方法: public Date() // 用本地当前的日期和时间初始化对象。 public Date(long time) // 参数表示构造的日期对象到 1970 年 1 月 1 日 00:00:00 (格林威治时间)之间相隔的毫秒数。 说明: 如本地时区是北京时区,基准时间为 1970 年 1 月 1 日 08 : 00 : 00. Date 类的常用方法: public String toString() // 返回该日期规范的字符串表示。
E N D
Date类 • Date类在java.util包中。 • Date类构造方法: • public Date() //用本地当前的日期和时间初始化对象。 • public Date(long time) //参数表示构造的日期对象到1970年1月1日00:00:00(格林威治时间)之间相隔的毫秒数。 说明:如本地时区是北京时区,基准时间为1970年1月1日08:00:00. • Date类的常用方法: • public String toString() //返回该日期规范的字符串表示。 • public long getTime() 返回自1970年1月1日08时(北京时区)以来的毫秒数,可以用于时间计算。
setTime(long) //设置日期表示从1970年1月1日08时起的毫秒数。 • after(date) //测试该日期是否在某指定的日期之后。 • before(Date) //测试该日期是否在某指定的日期之前。 • equals(Object) //比较两个日期.
例1: import java.util.Date; public class UseDate {public static void main(String[] args) {Date dold = new Date(); long lold = dold.getTime(); System.out.println("循环前系统时间为:" +dold.toString()); int sum = 0; for (int i=0; i<100; i++) {sum += i;} Date dNew = new Date(); long lNew = dNew.getTime(); System.out.println("循环后系统时间为:" +dNew.toString()); System.out.println("循环花费的毫秒数为:" + (lNew - lold)); } }
例2: import java.util.Date; public class DateDemo {public static void main(String args[]) {Date today=new Date(); System.out.println(today.getTime()); System.out.println("Today's date is:"+today); Date day1=new Date(1140203030304L); System.out.println("Day1's date is:"+day1); if(day1.after(today)) System.out.println("Day1晚于today"); else System.out.println("Day1早于today"); } }
Date对象表示时间的默认顺序是:星期、月、日、小时、分、秒、年。Date对象表示时间的默认顺序是:星期、月、日、小时、分、秒、年。 • 可以用java.text包中DateFormat类的子类SimpleDateFormat来实现对日期对象的格式化。 • 创建一个SimpleDateFormat对象,其构造方法为:public SimpleDateFormat(String pattern) pattern是一些具有特殊含义的字符。(见教材P120)对于patten中的普通字符,如果是ASCII字符集中的字母,必须用单引号字符括起。 • 该对象调用format(Date 对象);按指定的pattern格式来格式化日期对象。
time必须用单引号括起来 例3:import java.util.Date; import java.text.SimpleDateFormat; class Example6_1 { public static void main(String args[]) { Date nowTime=new Date(); System.out.println(nowTime); SimpleDateFormat matter1= new SimpleDateFormat(" 'time':yyyy年MM月dd日E 北京时间"); System.out.println(matter1.format(nowTime)); SimpleDateFormat matter2= new SimpleDateFormat("北京时间:yyyy年MM月dd日HH时mm分ss秒"); System.out.println(matter2.format(nowTime)); Date date1=new Date(1000), date2=new Date(-1000); System.out.println(matter2.format(date1)); System.out.println(matter2.format(date2)); System.out.println(new Date(System.currentTimeMillis())); } } currentTimeMillis()获取从1970年1月1日08时到目前时刻所走过的毫秒数。
Calender类 • Calendar类在java.util包中。 • Calendar类的常用方法 • getInstance()----初始化一个日历对象 • static Calendar getIntance() • set----翻阅日历 • set(int year,int month,int date) • set(int year,int month,int date,int hour,int minute) • set(int year,int month, int date, int hour, int minute,int second) 说明:当参数year取负数时表示公元前。
get----获取有关年份、月份、小时、星期等信息。get----获取有关年份、月份、小时、星期等信息。 public int get(int field) //参数field的有效值由Calendar的静态常量指定 例如: calendar.get(Calendar.MONTH);//返回一个整数,如果该整数是0表示当前日历是在一月,该整数是1表示当前日历是在二月等。 • setTime----设置调用对象的各种日期和时间分量。 final void setTime(Date d) • getTimeInMillis----将时间表示为毫秒。 public long getTimeInMillis() • add(int field,int amount)//将amount加到由field指定的分量
Calendar类定义的一些常用的静态变量: • YEAR //表示日期中的年 • MONTH //表示日期中的月 • DATE //表示日期中的日 • AM_PM //值为0表示上午,为1表示下午 • HOUR //表示小时 • MINUTE //表示分 • SECOND //表示秒 • MILLISECOND //表示毫秒
例:Calendar类的使用。 import java.util.Calendar; public class CalendarDemo {public static void main(String args[]) {Calendar c=Calendar.getInstance(); display(c); c.set(2007,10,1); c.set(Calendar.HOUR,5); c.set(Calendar.MINUTE,10); c.set(Calendar.SECOND,12); System.out.println("更新后时间:"); display(c); c.add(Calendar.DATE,10); c.add(Calendar.HOUR_OF_DAY,10); System.out.println("调整后时间:"); display(c); }
static voiddisplay(Calendar c) {System.out.print("日期:"); System.out.print(c.get(Calendar.YEAR)+"年"); System.out.print(c.get(Calendar.MONTH)+1+"月"); System.out.print(c.get(Calendar.DATE)+"日"); System.out.print("时间:"); if(c.get(Calendar.AM_PM)==0) System.out.print("AM "); else System.out.print("PM "); System.out.print(c.get(Calendar.HOUR)+":"); System.out.print(c.get(Calendar.MINUTE)+":"); System.out.println(c.get(Calendar.SECOND)); } }
例:import java.util.*; classExample6_2 {public static void main(String args[]) {Calendar calendar=Calendar.getInstance(); calendar.setTime(new Date()); String 年=String.valueOf(calendar.get(Calendar.YEAR)), 月=String.valueOf(calendar.get(Calendar.MONTH)+1), 日=String.valueOf(calendar.get(Calendar.DAY_OF_MONTH)), 星期=String.valueOf(calendar.get(Calendar.DAY_OF_WEEK)-1); int hour=calendar.get(Calendar.HOUR_OF_DAY), minute=calendar.get(Calendar.MINUTE), second=calendar.get(Calendar.SECOND);
System.out.println("现在的时间是:"); System.out.println(""+年+"年"+月+"月"+日+"日 "+ "星期"+星期); System.out.println(""+hour+"时"+minute+"分"+second+"秒"); calendar.set(1962,5,29); long time1962=calendar.getTimeInMillis(); calendar.set(2006,9,1); long time2006=calendar.getTimeInMillis(); long 相隔天数=(time2006-time1962)/(1000*60*60*24); System.out.println("2006年10月1日和1962年6月29日相隔"+相隔天数+"天"); } }
例: import java.util.*; class Example6_3 { public static void main(String args[]) { System.out.println(" 日 一 二 三 四 五 六"); Calendar 日历=Calendar.getInstance(); 日历.set(2008,10,1); //将日历翻到2006年12月1日。 int 星期几=日历.get(Calendar.DAY_OF_WEEK)-1; String a[]=new String[星期几+31]; for(int i=0;i<星期几;i++) { a[i]="**"; }
for(int i=星期几,n=1;i<星期几+31;i++) { if(n<=9) a[i]=String.valueOf(n)+" "; else a[i]=String.valueOf(n) ; n++; } for(int i=0;i<a.length;i++) { if(i%7==0) { System.out.println(""); } System.out.print(" "+a[i]); } } }
Math类 • Math是一个final类,含有基本数学运算函数。 • Math类的常用方法: • static double sqrt(double a) // 平方根 • static double pow(double a, double b) // 数a的b次方 • static int round(float a) // 四舍五入 • static long round(double a) // 四舍五入 • static double log(double a) // 对数
static double random( ) // 大于等于0.0小于1.0的随机数 • static double abs(double a) // 绝对值 • static double max(double a, double b) // 最大值 • static double min(double a, double b) // 最小值 • Math类的静态常量: • E:2.7182828284590452354 • PI:3.14159265358979323846
java.text包中的NumberFormat类可对数字进行格式化 • 实例化一个NumberFormat对象 Public static final NumberFormat getInstance() • 该对象调用 public final String format(double number)方法格式化数字number.
程序代码: import java.text.NumberFormat; class Example6_4 { public static void main(String args[]) { double a=Math.sqrt(5); System.out.println("格式化前:"+a); NumberFormat f=NumberFormat.getInstance(); f.setMaximumFractionDigits(7); f.setMinimumIntegerDigits(3); String s=f.format(a); System.out.println("格式化后:"+s);
MyNumberFormat myFormat=new MyNumberFormat(); System.out.println("格式化后:"+myFormat.format(a,4)); System.out.println("得到的随机数:"); int number=8; for(int i=1;i<=20;i++) { int randomNumber=(int)(Math.random()*number)+1; System.out.print(" "+randomNumber); if(i%10==0) System.out.println(""); } } }
class MyNumberFormat { public String format(double a,int n) { String str=String.valueOf(a); int index=str.indexOf("."); String temp=str.substring(index+1); int leng=0; leng=temp.length(); int min=Math.min(leng,n); str=str.substring(0,index+min+1); return str; } }
BigInteger类 • java.math包中的BigInteger类提供任意精度的整数运算。 • 使用构造方法: public BigInteger(String val)构造一个十进制的BigInteger对象。 • BigInteger类的常用方法 • public BigInteger add(BigInteger val) 返回当前大整数对象与参数指定的大整数对象的和。 • public BigInteger subtract(BigInteger val) 返回当前大整数对象与参数指定的大整数对象的差。 • public BigInteger multiply(BigInteger val) 返回当前大整数对象与参数指定的大整数对象的积。 • public BigInteger divide(BigInteger val) 返回当前大整数对象与参数指定的大整数对象的商。
实训十二 时间、日期和数字 上机目的:巩固掌握Date类、Calendar类、Math类的应用。 上机内容: 1、调试上课所讲例题 2、试编写一个应用程序,生成100个随机数,统计小于和不小于0.5的数各有多少并统计总共花费多少毫秒。 3、教材P126的第2、3、5题 作业3:将第2题及教材P126的第2、3、5题的代码写到实验报告本上。