Java中的包

Date类

util是utility(即:中文工具)的简写,也就是java的实用工具集包,该包提供了大量的实用工具类,常用工具如日期与时间操作、随机数、正则表达式、国际化等,而在util包中比较核心的应该是Collection类集工具,java系统提供了丰富的数据结构用于出集合的操作。

一、Date类简介

日期类主要包括Date类与Calendar类,这一节我们先介绍Date类, Date 表示特定的瞬间,精确到毫秒。Date类用于表示日期和时间,在计算机中的表示和我们现实世界使用差不多,但是还是有点区别的,而且还有中西文化之间的差异,所以在学习这个类之前,我们清楚Date类和现实世界之间对世界的之间的差异:

  • 年份由整数表示,但是Date类的年份由1900开始算,也就是Date类的年份为y,那么现实世界就是 y + 1900 表示。

  • 月份由从 0 至 11 的整数表示,也就是0 是一月、1 是二月等等;因此 11 是十二月。

  • 日期(一月中的某天)按通常方式由整数 1 至 31 表示,这点和现实世界一致。

  • 小时由从 0 至 23 的整数表示。因此,从午夜到 1 a.m. 的时间是 0 点,从中午到 1 p.m. 的时间是 12 点,这点和现实世界一致。

  • 分钟按通常方式由 0 至 59 的整数表示,这点和现实世界一致。

  • 秒由 0 至 61 的整数表示;值 60 和 61 只对闰秒发生,尽管那样,也只用在实际正确跟踪闰秒的 Java 实现中。于按当前引入闰秒的方式,两个闰秒在同一分钟内发生是极不可能的,但此规范遵循 ISO C 的日期和时间约定。

  • Date可是精确到毫秒,Date的元毫秒从1970 年 1 月 1 日 00:00:00 GMT 以来此 Date 对象表示的毫秒数。

二、Date类常用方法

在java中,日期时间用java.util.Date来表示,调用默认构造器Data(),将会创建一个当前系统时间的Date对象,时间精确到毫秒。Date类常用方法是:

Date()

分配 Date 对象并初始化此对象,以表示分配它的时间(精确到毫秒)。

boolean after(Date when)

测试此日期是否在指定日期之后。

boolean before(Date when)

测试此日期是否在指定日期之前。

int compareTo(Date anotherDate)

比较两个日期的顺序。

其它的还有很多获得年月日时分秒的函数,但是这些方法都已经过期,这些方法都已经Calendar.get(...)方法替代了,当然虽然过期了,但是还是可以使用的。示例代码如下:

public class DateStu {
    public static void main(String[] args) {
        // 获得操作系统的当前时间
        Date date = new Date();
        Date date2=new Date(1997,6,7);
        System.out.println(date.before(date2));
        
        //如果date2大于date返回 1  等于返回 0  小于 -1
        System.out.println(date2.compareTo(date));
        //
        System.out.println("年:" + (date.getYear()+1900) + ",月:" + (date.getMonth()+1)
                + ",日:" + date.getDate() + ",星期:" + date.getDay() + ",时:"
                + date.getHours() + ",分:" + date.getMinutes() + ",秒:"
                + date.getSeconds());
        
        System.out.println("现在的毫秒:"+date.getTime()/1000);
        
        System.out.println(date.toString());
        
        System.out.println(date.toLocaleString());//本地时间格式

    }

}

程序输出如下:

 

true

1

年:2014,月:2,日:20,星期:4,时:23,分:3,秒:5

现在的毫秒:1392908585

三、时间的格式化显示

各系统在显示时间的格式是不统一的,在中国一般采用英式日期,如“2013-02-02 17:30:24”的格式,而在美国时间的显示则为“月-日-年”的格式“02-02-2013 17:30:24”。要想格式化时间或者把字符串转换为Date类,可以使用java.text.Dateformat抽象类规定日期格式化的操作,具体常用的实现是java.text.SimpleDateformat类。

示例代码如下:

//1990年  9 月 4 日
//"yyyy.MM.dd G 'at' HH:mm:ss z"  2001.07.04 AD at 12:08:56 PDT  
//HH 24 小时,hh 12小时
SimpleDateFormat sdf=new SimpleDateFormat("yyyy年MM月dd");
String dateFromt= sdf.format(date);//日期转换为字符串
System.out.println(dateFromt);
        
//把字符串转换为日期
String inputdateFString="2013年09月8";
try {
    Date inputDate=sdf.parse(inputdateFString);
    System.out.println(inputDate);
} catch (ParseException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
}

程序输出如下:

Thu Feb 20 23:03:05 CST 2014

2014-2-20 23:03:05

 

Calendar类

一、Calendar简介

java.util.Calendar意为日历,跟Date类有很多类似的地方,但是也有区别的,Date类主要用于时间的表示,而Calendar侧重于时间的计算。Calendar类是一个抽象基类,需要通过工厂方法去取得当前系统日历:

    Calendar calendar =  Calendar.getInstance();

Calendar 与 Date 的转换非常简单,代码如下:

Calendar calendar = Calendar.getInstance();
// 从一个 Calendar 对象中获取 Date 对象
Date date = calendar.getTime();
// 将 Date 对象反应到一个 Calendar 对象中,
// Calendar/GregorianCalendar 没有构造函数可以接受 Date 对象
// 所以我们必需先获得一个实例,然后设置 Date 对象
calendar.setTime(date);

二、示例方法

Calendar类中提供了大量各种用于日期计算的方法

public class CalStu {
    public static void main(String[] args) {

        // 获得实例对象使用 getInstance
        Calendar cal = Calendar.getInstance();
        //设置值
        //cal.set(Calendar.YEAR, 1997);
        //cal.set(Calendar.MINUTE, 3);
        //可以使用add计算
        cal.add(Calendar.YEAR, -30);//
                //获得年月日,时分秒,日期等
        System.out.println("年:" + cal.get(Calendar.YEAR) + ",月:"
                + (cal.get(Calendar.MONTH)+1) + ",日:" + cal.get(Calendar.DATE)
                + ",时:" + cal.get(Calendar.HOUR_OF_DAY) + ":分:"
                + cal.get(Calendar.MINUTE) + ",秒:" + cal.get(Calendar.SECOND)
                + ",星期:" + cal.get(Calendar.DAY_OF_WEEK));
        System.out.println(cal.get(Calendar.DAY_OF_YEAR));
        System.out.println(cal.get(Calendar.WEEK_OF_YEAR));
        
        System.out.println(cal.getTime());//把calendar转换为date对象
        System.out.println(cal.getTimeInMillis());
        
        //实例
        //计算每个月的天数
        //9 月份的天数  
        for(int i=0;i<12;i++){
            cal.set(Calendar.MONTH, i+1);
            cal.set(Calendar.DATE, 1);
            
            cal.add(Calendar.DATE, -1);
            
            System.out.println("第"+(i+1)+"月的天数:"+cal.get(Calendar.DATE));
        }
        

    }

}

当然这个输出,会因为你的因为你当前的运行时间不同而不同,程序输出如下:

年:1984,月:2,日:20,时:23:分:8,秒:25,星期:2

51

8

Mon Feb 20 23:08:25 CST 1984

446137705832

第1月的天数:31

第2月的天数:29

第3月的天数:31

第4月的天数:30

第5月的天数:31

第6月的天数:30

第7月的天数:31

第8月的天数:31

第9月的天数:30

第10月的天数:31

第11月的天数:30

第12月的天数:31

三、完成以下练习

1、格式化输出当期日期。如:2012年3月13日 21:30:30

package Exe;

 

import java.text.SimpleDateFormat;

import java.util.Date;

 

/*

* 1、格式化输出当期日期。如:2012年3月13日 21:30:30

*/

public class Exe1 {

 

public static void main(String[] args) {

 

SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss"); // 设置输出格式

System.out.println(sdf.format(new Date())); // 将当地时间按输出格式输出

 

}

 

}

2、把字符串“2012-3-6 20:78:1”解释为日期,并输出。

package Exe;

 

import java.text.SimpleDateFormat;

 

public class Exe2 {

 

public static void main(String[] args) {

String str = "2012-3-6 20:78:1";

 

SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");// 解析用格式

 

 

try {

System.out.println(sdf.parse(str));

} catch (Exception e) {

e.printStackTrace();

}

 

}

 

}

3、请问今年是闰年了吗?

package Exe;

 

import java.text.SimpleDateFormat;

import java.util.Calendar;

 

public class Exe3 {

 

public static void main(String[] args) {

int year;

Calendar cal = Calendar.getInstance();

 

year = cal.get(Calendar.YEAR);

 

if ((year % 4 == 0 && year % 100 != 0) || (year % 400 == 0)) { // 判断是否润年

System.out.println(year + "年是润年!");

} else {

System.out.println(year + "年是不润年!");

}

 

}

 

}

4、请用程序测试使用循环计算1+2+...100000所用的时间(以秒为单位)。

public class Exe4 {

 

public static void main(String[] args) {

 

 

Date beginDate=new Date();

long sum=0;

for(long i=1;i<=100000000;i++){

sum+=i;

}

System.out.println(sum);

Date endDate=new Date();

 

 long result= endDate.getTime()-beginDate.getTime();

 

 System.out.println("总时间:"+result+"毫秒");

 

 

}

 

}

5、小明是1992年7月2日生日的,国家规定22岁就可以去结婚,请问小明什么时候可以去结婚?

package Exe;

 

import java.text.ParseException;

import java.text.SimpleDateFormat;

import java.util.Calendar;

 

public class Exe5 {

public static void main(String[] args) throws NumberFormatException, ParseException {

 

int y1, y2, age;

String str = "1992年7月2日"; // 定义小明的生日

Calendar cal = Calendar.getInstance();

 

SimpleDateFormat year = new SimpleDateFormat("yyyy");

y1 = Integer.parseInt(year.format(cal.getTime())); // 提取当前年份

y2 = Integer.parseInt(year.format(year.parse(str))); // 提取小明的出生年份

 

age = (y1 - y2); // 小明的岁数

 

if (age >= 22) {

System.out.println(age + "岁可以结婚了!");

} else {

System.out.println(age + "岁还不可以结婚!");

}

 

}

}

6、计算下一年的今天是星期几,请用程序打印输出。

package Exe;

 

import java.util.Calendar;

 

/**

* 6、计算下一年的今天是星期几,请用程序打印输出。

*

* @author Administrator

*

*/

public class Exe6 {

 

public static void main(String[] args) {

 

Calendar calendar = Calendar.getInstance();

System.out.println(calendar.get(Calendar.YEAR) + "年");

 

calendar.add(Calendar.YEAR, 1);

int week = calendar.get(Calendar.DAY_OF_WEEK);

switch (week) {

case 1:

System.out.println("星期日");

break;

case 2:

System.out.println("星期一");

break;

case 3:

System.out.println("星期二");

break;

case 4:

System.out.println("星期三");

break;

case 5:

System.out.println("星期四");

break;

case 6:

System.out.println("星期五");

break;

case 7:

System.out.println("星期六");

break;

}

 

}

 

}

7、输出2012年4月的日历。类似日历的格式输出。

输出:

日 一 二 三 四 五 六

1 2 3 4 5 6 7

package Exe;

 

import java.util.Calendar;

 

 

public class Exe7 {

 

public static void main(String[] args) {

 

Calendar time = Calendar.getInstance();

 

// 设置日期2013.11.1

time.set(2013, 1, 1);

int a = (time.get(Calendar.DAY_OF_WEEK));//星期

 

System.out.println(" Sun Mon Thu Wed Thu Fri Sat");

 

// 根据1号在星期几输出空格

for (int i = 0; i < time.get(Calendar.DAY_OF_WEEK) - 1; i++)

System.out.print(" ");

 

//获得最大天数

time.add(time.MONTH, 1);

time.add(time.DATE, -1);

 

for (int i = 1; i <= time.get(Calendar.DATE); i++) {

 

if ((i + a) % 7 == 2)

System.out.println();

 

System.out.printf("%4d", i);

 

}

 

}

 

}

8、输出2013年整年的日历。

package Exe;

 

import java.util.Calendar;

 

public class Exe8 {

 

public void output(int year,int month){

Calendar time = Calendar.getInstance();

 

// 设置日期2013.11.1

time.set(year, month, 1);

int a = (time.get(Calendar.DAY_OF_WEEK));//星期

 

System.out.println(" Sun Mon Thu Wed Thu Fri Sat");

 

// 根据1号在星期几输出空格

for (int i = 0; i < time.get(Calendar.DAY_OF_WEEK) - 1; i++)

System.out.print(" ");

 

//获得最大天数

time.add(time.MONTH, 1);

time.add(time.DATE, -1);

int lastDate=time.get(Calendar.DATE);

 

time.set(Calendar.DATE, 1);

 

for (int i = 1; i <=lastDate ; i++) {

 

System.out.printf("%4d", time.get(Calendar.DATE));

 

if (time.get(Calendar.DAY_OF_WEEK) == 7)

System.out.println();

 

time.add(Calendar.DATE, 1);

 

}

}

public static void main(String[] args) {

Exe8 exe8=new Exe8();

 

int year=2013;

for(int month=0;month<12;month++){

exe8.output(year, month);

 

System.out.println();

System.out.println();

}

}

}

 

 

Random随机数类

一、Random随机数类

1、简介

Random随机数类是一个非常简单和实用类,用于生成伪随机数,在一些游戏获得某些应用中都会大量使用到随机数,构造方法有两个,分别是:

Random() 创建一个新的随机数生成器。

Random(long seed) 使用单个 long 种子创建一个新的随机数生成器。

如果用相同的种子创建两个 Random 实例,则对每个实例进行相同的方法调用序列,它们将生成并返回相同的数字序列,所以一般我们在一段程序中使用一个Random示例,或者为每个Random示例使用不同的种子。

我们在讲解Math类的时候也讲过一个随机方法random(),这个方法事实上也就是使用Random类实现的。事实上使用Math.random()可能还更容易点。

2、随机数的常用方法:

protected int next(int bits)

生成下一个伪随机数。

boolean nextBoolean()

返回下一个伪随机数,它是取自此随机数生成器序列的均匀分布的 boolean 值。

void nextBytes(byte[] bytes)

生成随机字节并将其置于用户提供的 byte 数组中。

double nextDouble()

返回下一个伪随机数,它是取自此随机数生成器序列的、在 0.0 和 1.0 之间均匀分布的 double 值。

float nextFloat()

返回下一个伪随机数,它是取自此随机数生成器序列的、在 0.0 和 1.0 之间均匀分布的 float 值。

double nextGaussian()

返回下一个伪随机数,它是取自此随机数生成器序列的、呈高斯(“正态”)分布的 double 值,其平均值是 0.0,标准差是 1.0。

int nextInt()

返回下一个伪随机数,它是此随机数生成器的序列中均匀分布的 int 值。

int nextInt(int n)

返回一个伪随机数,它是取自此随机数生成器序列的、在 0(包括)和指定值(不包括)之间均匀分布的 int 值。

long nextLong()

返回下一个伪随机数,它是取自此随机数生成器序列的均匀分布的 long 值。

void setSeed(long seed)

使用单个 long 种子设置此随机数生成器的种子。

二、示例

生成10个100以内的随机数,代码如下:

public class Bac {

    public static void main(String[] args) {
        // System.out.println(Math.random());//<1
        // 随机打印 1 -- 10
        Random random = new Random(System.currentTimeMillis());
        for (int i = 0; i < 10; i++) {
            System.out.println(random.nextInt(100));
        }
    }

}

完成一个玩筛子的游戏。

代码如下:

public static void main(String[] args) {
        //
        Scanner scanner = new Scanner(System.in);
        System.out.println("买大还是小:");
        String input = scanner.nextLine();

        // 随机生成三个数 1- 6
        Random random = new Random(System.currentTimeMillis());// 以当前时间作为种子
        int num1 = random.nextInt(6) + 1;
        int num2 = random.nextInt(6) + 1;
        int num3 = random.nextInt(6) + 1;

        // 测试:
        System.out.println(num1 + ":" + num2 + ":" + num3);

        // 判定
        String result;
        if (num1 == num2 && num1 == num3) {
            System.out.println("豹子");
            result = "豹子";
        } else if (num1 + num2 + num3 > 9) {
            System.out.println("大");
            result = "大";
        } else {
            System.out.println("小");
            result = "小";
        }

        // 赢了吗?
        if (input.equals(result)) {
            System.out.println("赢了");
        } else {
            System.out.println("输了");
        }
    }

运行代码,要先输入大小,然后程序随机生成三个数,并判断输赢。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值