JAVA学习笔记16-(日期,随机数,枚举)


日期

JAVA中的日期是一个Date类来完成的


获取系统当前时间

获取系统当前时间(精确到毫秒的系统当前时间)
Date nowTime = new Date();
System.out.println(nowTime);
会输出下面的格式(默认输出格式)
Thu Mar 05 10:51:06 CST 2020

日期可以格式化吗?
将日期类型Date,按照指定的格式进行转换:
Date --转换成具有一定格式的日期字符串–>String

SimpleDateFormat是java.text包下的。专门负责日期格式化的。
其中包括的具体格式见API
JAVA学习笔记16-(日期,随机数,枚举)_第1张图片

其中常用的如下:
yyyy 年(年是4)
MM 月(月是2位)
dd 日
HH 时
mm 分
ss 秒
SSS 毫秒(毫秒3位,最高9991000毫秒代表1秒)
注意:在日期格式中,除了y M d H m s S这些字符不能随便写之外,剩下的符号格式自己随意组织。
例如:
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss SSS");
String nowTimeStr = sdf.format(nowTime);
System.out.println(nowTimeStr);

那么则会输出:2020-8-14 16:05:19 006

其实本质上就是将Date转为String字符串

那么假设现在有一个日期字符串String,怎么转换成Date类型?

String --> Date
String time = "2008-08-08 08:08:08 888";

SimpleDateFormat sdf2 = new SimpleDateFormat("格式不能随便写,要和日期字符串格式相同");

注意:字符串的日期格式和SimpleDateFormat对象指定的日期格式要一致。不然会出现异常:java.text.ParseException

SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss SSS");
Date dateTime = sdf2.parse(time);
System.out.println(dateTime); 
Fri Aug 08 08:08:08 CST 2008

获取自1970年1月1日 00:00:00 000到当前系统时间的总毫秒数。

1秒 = 1000毫秒

要获得自1970年1月1日 00:00:00 000到当前系统时间的总毫秒数,需要调用System类中的一个方法:

System.currentTimeMillis();

这个方法能有什么用呢?
我们可以通过他来去统计执行一个方法的耗时!

统计一个方法耗时

在调用目标方法之前记录一个毫秒数
long begin = System.currentTimeMillis();

调用方法;

在执行完目标方法之后记录一个毫秒数
long end = System.currentTimeMillis();

System.out.println("耗费时长"+(end - begin)+"毫秒");

Date的含参构造方法

在API中,我们注意到Date还有一个构造方法:(已过时的方法不予学习)
JAVA学习笔记16-(日期,随机数,枚举)_第2张图片
我们可以在创建对象时去传一个参数进去!
那么这样是干什么的呢?

这个时间是什么时间?
Date time = new Date(1);
注意:参数是一个毫秒

其实这个time代表的是如下时间
1970-01-01 00:00:00 001

那么这个传参的意思就出来了
他的意思是从1970-01-01 00:00:00 000开始,过了"date"毫秒后的时间!

那么我们可以以此去获得昨天此时的时间(更多玩法自己开发)

SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss SSS");
Date time2 = new Date(System.currentTimeMillis() - 1000 * 60 * 60 * 24);

1000毫秒=11分钟=601小时=60分钟
1=24小时

String strTime2 = sdf.format(time2);
System.out.println(strTime2);

数字number

在java.text也有关于number的一些东西


数字的格式化DecimalFormat

用法
DecimalFormat df = new DecimalFormat("数字格式");

数字格式有哪些?
# 代表任意数字
, 代表千分位
. 代表小数点
0 代表不够时补0

###,###.##
表示:加入千分位,保留2个小数。

具体用法如下:

DecimalFormat df = new DecimalFormat("###,###.##");
String s = df.format(1234.561234);
System.out.println(s);
"1,234.56"

DecimalFormat df2 = new DecimalFormat("###,###.0000");
保留4个小数位,不够补上0
String s2 = df2.format(1234.56);
System.out.println(s2);
"1,234.5600"

高精度数据BigDecimal

一般来说在财务软件中double是不够的,所以有了这个数据类型

BigDecimal

具体用法如下:

这个100不是普通的100,是精度极高的100
BigDecimal v1 = new BigDecimal(100);

精度极高的200
BigDecimal v2 = new BigDecimal(200);

求和

v1 + v2;
这样不行,v1和v2都是引用,不能直接使用+求和。

BigDecimal v3 = v1.add(v2);
调用方法求和。

System.out.println(v3);
300

BigDecimal v4 = v2.divide(v1);
System.out.println(v4);
2

随机数

用法如下:

创建随机数对象
Random random = new Random();

随机产生一个int类型取值范围内的数字。
int num1 = random.nextInt();
System.out.println(num1);

产生[0~100]之间的随机数。不能产生101。
nextInt翻译为:下一个int类型的数据是101,表示只能取到100.

int num2 = random.nextInt(101);
不包括101
System.out.println(num2);

枚举

enum
具体用法:

enum 枚举类型名{
	枚举值1,枚举值2
}

例如去建造一个枚举类,其中包括成功和失败:

enum Result{
    SUCCESS, FAIL
}
SUCCESS 是枚举Result类型中的一个值
FAIL 是枚举Result类型中的一个值
枚举中的每一个值,可以看做是“常量”

而在函数中直接调用的话就是:

Result.SUCCESS
Result.FAIL

当然也可以结合switch使用,例如下面我们创建一个四季枚举类

春夏秋冬
public enum Season {
    SPRING, SUMMER, AUTUMN, WINTER
}

然后用switch去调用

Season season = Season.AUTUMN;
switch (season) {
	必须省略Season.
	case SPRING:
		System.out.println("春天");
		break;
	case SUMMER:
		System.out.println("夏天");
		break;
	case AUTUMN:
		System.out.println("秋天");
		break;
	case WINTER:
		System.out.println("冬天");
		break;
}
秋天

你可能感兴趣的:(JAVA学习笔记16-(日期,随机数,枚举))