Java中的Math类与日期类(万年历的参考知识)

导读:本篇文章讲解 Java中的Math类与日期类(万年历的参考知识),希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com

一、Math类

1、生成随机数

(1)Math中的random()方法

public static void main(String[] args) {
		//随机生成0-1之间的小数,返回值为double
		System.out.println(Math.random());
		//随机生成0-10之间的小数
		System.out.println(10*Math.random());
		//随机生成0-10之间的整数
		System.out.println((int)(10*Math.random()));
	}

(2)Random类中的方法(更常用)
注意“左闭右开”

public static void main(String[] args) {
		Random rd = new Random();
		//使用rd.nextInt(num)生成随机整数 
		//表示:在[0,num)区间随机生成整数 
		int num = rd.nextInt(10); //[0,10)
		System.out.println("num:"+num);
	}

2、常用方法

(1)Math.round(x):
定义:
表示“四舍五入”,算法为*Math.floor(x+0.5),*即将原来的数字加上0.5,再向下取整。
如果x距离相邻两侧的整数距离不一样,则取距离近的那个数字。
如果x距离相邻两侧的整数距离一样,则取真值大的那个数字(即为大于x的那个数字)
举例:

public static void main(String[] args) {
		System.out.println(Math.round(-11.5));//-11
		System.out.println(Math.round(-11.4));//-11
		System.out.println(Math.round(-11.6));//-12
		
		System.out.println(Math.round(11.5));//12
		System.out.println(Math.round(11.4));//11
		System.out.println(Math.round(11.6));//12
	}

(2)Math.floor(x)
定义:
向下取整,返回值为double类型。
举例:

public static void main(String[] args) {
		System.out.println(Math.floor(-11.5));//-12.0
		System.out.println(Math.floor(-11.1));//-12.0
		System.out.println(Math.floor(-11.8));//-12.0
		
		System.out.println(Math.floor(11.5));//11.0
		System.out.println(Math.floor(11.1));//11.0
		System.out.println(Math.floor(11.8));//11.0
	}

(3)Math.ceil(x)
定义:
向上取整,返回值为double类型。
举例:

public static void main(String[] args) {
		System.out.println(Math.ceil(-11.5));//-11.0
		System.out.println(Math.ceil(-11.4));//-11.0
		System.out.println(Math.ceil(-11.6));//-11.0
		
		System.out.println(Math.ceil(11.5));//12.0
		System.out.println(Math.ceil(11.4));//12.0
		System.out.println(Math.ceil(11.6));//12.0
	}

二、日期类

1、long类型的时间

1、获取long类型的时间
System.currentTimeMillis()
获取的是:系统从1970年到当前时间的毫秒数。

long time = System.currentTimeMillis();
System.out.println(time);//1591023818578ms

2、简单分析:
早期电脑系统是32位,32位的数值刚好是int类型所能表示的数值范围。

System.out.println(Integer.MAX_VALUE);
long year = time/1000/60/60/24/365;
System.out.println(year);//50年
System.out.println(2020-year);//1970年

32位系统每过68年就会发生时间归0的问题,所以计算机的纪元时间的起点记为1970年1月1日。

2、Date类型的时间

1、获取Date类型的时间:创建对象

Date date = new Date();
System.out.println(date);
//Wed Jun 03 09:43:15 CST 2020
//CST:CentralStandard Time(中央时区)

2、Date类型的相关操作
(1)获取年份

	System.out.println(date.getYear());//120
	System.out.println(date.getYear()+1900);//2020

在早期的计算机的程序中规定了年份仅用两位数来表示。也就是说,加入是1971年,在计算机中会被表示为71,但是到了2000年的时候就会出现问题,计算机就会将其表示为00。
这样的话,计算机内部对年份的计算就会出现问题,这个事情在当时被称为千年虫。

(2)获取月份
**注意:**月份0-11,0表示第一个月,正确月份应该+1。

public static void main(String[] args) {
	Date date = new Date();
	System.out.println(date);
	//Wed Jun 03 09:43:15 CST 2020
	System.out.println(date.getMonth());//5
	System.out.println(date.getMonth()+1);//6
}

3、Calendar类型的时间

Calendar类是java.util包中提供的一个抽象类,包含了对不同国家地区日历的处理。
1、获取Calendar类型的时间
(1)Calendar是抽象类,所以要用其子类:GregorianCalendar来创建对象。

Calendar cal = new GregorianCalendar();

(2)使用静态工厂的方法来获取对象。

Calendar cal = Calendar.getInstance();

2、get(),set()
主要是获取相应的字段,然后进行修改。
以get()为例字,set()是同理。
注意两点:
(1)默认一周的第一天是周日
(2)月份0-11,0表示第一个月,正确月份应该+1

说明:2020/6/5 周五 下午4.15左右
(1)获取年份

System.out.println(cal.get(Calendar.YEAR));//2020

(2)获取月份

System.out.println(cal.get(Calendar.MONTH)+1);//6

(3)获取日期(一个月的第几天)

System.out.println(cal.get(Calendar.DATE));//5
System.out.println(cal.get(Calendar.DAY_OF_MONTH));//5

(4)获取星期(一周的第几天)

System.out.println(cal.get(Calendar.DAY_OF_WEEK));//6

(5)获取本周是当前月的第几周

System.out.println(cal.get(Calendar.WEEK_OF_MONTH));//1
System.out.println(cal.get(Calendar.DAY_OF_WEEK_IN_MONTH));//1

(6)获取时分秒

System.out.println("时:"+cal.get(Calendar.HOUR));//4
System.out.println("时:"+cal.get(Calendar.HOUR_OF_DAY));//16
System.out.println("分:"+cal.get(Calendar.MINUTE));//15
System.out.println("秒:"+cal.get(Calendar.SECOND));//25

(7)获取本月/本年的总天数

System.out.println("当前月的总天数:"+cal.getActualMaximum(Calendar.DATE));//30
System.out.println("当前年的总天数"+cal.getActualMaximum(Calendar.DAY_OF_YEAR));//366

3、add(),roll()
(1)add()

public class DateDemo01 {
	public static void main(String[] args) {
		Calendar cal = new GregorianCalendar();
		//2020.6.5
		//往前倒退7个月
		cal.add(Calendar.MONTH, -7);
		System.out.println(cal.getTime());//2019.11.5
	}
}

(2)roll()

public class DateDemo01 {
	public static void main(String[] args) {
		Calendar cal = new GregorianCalendar();
		//2020.6.5
		//往前倒退7个月
		cal.roll(Calendar.MONTH, -7);
		System.out.println(cal.getTime());//2020.11.5
										  //不会影响到年份
	}
}

4、三种类型之间的相互转换

1、long-Date-Calendar

		long l = System.currentTimeMillis();
		//long->Date
		Date date = new Date(l);
		//Date->Calendar
		Calendar c = new GregorianCalendar();
		c.setTime(date);

2、Calendar-Date-long

		Calendar c = new GregorianCalendar();
		//Calendar->Date
		Date date = c.getTime();
		//Date->long
		long l = date.getTime();

3、Calendar-long

		Calendar c = new GregorianCalendar();
		//Calendar->long
		long l = c.getTimeInMillis();

5、日期的格式化

规则:
y: 年 yyyy:四位年显示
M:月 MM:两位月显示
d:日 dd:两位日显示
H:时 HH:两位时显示
m:分 mm:两位分显示
s:秒 ss:两位秒显示
a:上午、下午
E:星期
SimpleDateFormat sdf;
(1)字符串–>Date(parse)
sdf.parse(str);

public class DateDemo01 {
	public static void main(String[] args) {
		String str = "2020-06-09 20:00:00";
		SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
		try {
			Date date = sdf.parse(str);
			System.out.println(date);//Tue Jun 09 20:00:00 CST 2020
		} catch (ParseException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
}

(2)Date–>字符串(format)
sdf.format();

public class DateDemo01 {
	public static void main(String[] args) {
		Date date = new Date();
		System.out.println(date);//Fri Jun 05 16:52:12 CST 2020
		SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
		String str = sdf.format(date);
		System.out.println(str);//2020-06-05 16:51:56
	}
}

6、时区

“GMT+8”:北京时间

public class DateDemo01 {
	public static void main(String[] args) {
		SimpleDateFormat sdf = new SimpleDateFormat("HH:mm:ss");
		//当前时间
		Date date = new Date();
		System.out.println(sdf.format(date));//16:57:45
		
		//改变时区
		TimeZone zone = TimeZone.getTimeZone("GMT+9");
		sdf.setTimeZone(zone);
		
		//输出改变时区后的时间
		System.out.println(sdf.format(date));//17:57:45
	}
}

7、定时器

timer.schedule(要执行的任务,第一次执行任务要等待的时间,每隔多长时间执行一次);单位:ms

public class DateDemo01 {
	public static void main(String[] args) {
		Timer timer = new Timer();
		//使用匿名内部类来创建对象
		//TimerTask是抽象类
		timer.schedule(new TimerTask() {
			@Override
			public void run() {
				Date date = new Date();
				SimpleDateFormat sdf = new SimpleDateFormat("HH:mm:ss");
				System.out.println(sdf.format(date));
			}
		}, 5000, 1000);
	}
}

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/16902.html

(0)
小半的头像小半

相关推荐

极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!