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
其中常用的如下:
yyyy 年(年是4位)
MM 月(月是2位)
dd 日
HH 时
mm 分
ss 秒
SSS 毫秒(毫秒3位,最高999。1000毫秒代表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
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)+"毫秒");
在API中,我们注意到Date还有一个构造方法:(已过时的方法不予学习)
我们可以在创建对象时去传一个参数进去!
那么这样是干什么的呢?
这个时间是什么时间?
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毫秒=1秒
1分钟=60秒
1小时=60分钟
1天=24小时
String strTime2 = sdf.format(time2);
System.out.println(strTime2);
在java.text也有关于number的一些东西
用法
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"
一般来说在财务软件中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;
}
秋天