一、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