一、Date类(util)
- 表示特定的时间,精确到毫秒。表示日期和时间的类。
- 毫秒表示千分之一秒。1000毫秒=1秒。
- 特定的瞬间:一个时间点。
(一)毫秒值的概念和作用
1、毫秒值:
(1)作用:可以对时间和日期进行计算。可以把日期转换为毫秒进行计算,计算完毕,再把毫秒转换为日期。
(2)把当前的日期转换为毫秒:
- 当期的日期:2008-01-01
- 时间原点(0毫秒):1970年1月1日00:00:00
- 就是计算当前日期
(3)把毫秒转化为日期
- 一天=86400000毫秒
- 中国属于东八区,会把时间增加8个小时。
2、Date类的构造方法和成员方法
(1)空参数构造方法:
Date()获取当前系统的日期和时间
(2)带参数的构造方法:
Date(long date):传递毫秒值,把毫秒值转换为日期
(3)成员方法
long getTime():
返回自1970年至今经历了多少毫秒
import java.util.Date;
public class Date1 {
public static void main(String[] args) {
//无参数构造方法
Date d1=new Date();
System.out.println(d1);
//有参数的构造方法
Date d2 =new Date(857);
System.out.println(d2);
//成员方法
Date d3=new Date();
long time=d3.getTime();
System.out.println(time);
}
}
Sun Mar 07 20:40:35 CST 2021
Thu Jan 01 08:00:00 CST 1970
1615120835544
二、DateFormat类(text)
- 时间日期格式化子类的抽象类。
- 作用:格式化(日期——文本)解析(文本——日期)
(一)Format方法
1、按照指定的模式,将Date日期格式化为符合模式的字符串。
2、把符合模式的字符串解析为Date日期。
3、DateFormat类是一个抽象类,无法直接创建对象使用,可以使用其子类。
4、SimpleDate类
构造方法:
SimpleDateFormat(String pattern)
参数:
String pattern:传递指定的模式
模式:区分大小写
y-年 M-月 d-日 H-时 m-分 s-秒
写对应的模式,就会把模式替换为对应的日期和时间
如:“yyyy-MM-dd HH:mm:ss”
“yyyy年MM月dd日HH时mm分ss秒”
注意:模式中的字母不能更改
使用步骤
- 创建对象,构造方法中传递指定的模式
- 调用format方法,按照构造方法中指定的模式,把Date日期格式化为符合模式的字符串(文本)
parse方法
- 创建对象,构造方法中传递指定的模式
- 调用parse方法,把符合构造方法中模式的字符串,解析为Date日期
- parse方法声明了一个异常(解析异常),如果字符串和构造方法中的模式不一样就会出现异常。
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
public class Date2 {
public static void main(String[] args) throws ParseException {
//format方法
SimpleDateFormat d1 =new SimpleDateFormat("yyyy年MM月dd日 HH时mm分ss秒");
Date date1=new Date();
String t1=d1.format(date1);
System.out.println(date1);
System.out.println(t1);
//parse方法,注意异常的处理
SimpleDateFormat d2 =new SimpleDateFormat("yyyy年yy月yy日 HH时mm分ss秒");
Date date2=d2.parse("2021年03月09日 20时23分20秒");
System.out.println(date2);
输出为:
Tue Mar 09 20:25:35 CST 2021
2021年03月09日 20时25分35秒
Thu Jan 01 20:23:20 CST 2009
三、Calendar类(日历类)
1、Calender类的简单使用
- 抽象类,里面提供了很多操作日历字段的方法(YEAR、MONTH等)
- 该类无法直接创建对象使用,里面有一个静态方法叫getInstance(),该方法返回了Calender类的子类对象。
- static Calendar getInstance()使用默认时区和语言环境获得一个日历。
import java.util.Calendar;
public class Date3 {
public static void main(String[] args) {
Calendar c = Calendar.getInstance();
System.out.println(c);
}
}
输出为:
java.util.GregorianCalendar[time=1615293478771,areFieldsSet=true,areAllFieldsSet=true,lenient=true,zone=sun.util.calendar.ZoneInfo[id="Asia/Shanghai",offset=28800000,dstSavings=0,useDaylight=false,transitions=31,lastRule=null],firstDayOfWeek=1,minimalDaysInFirstWeek=1,ERA=1,YEAR=2021,MONTH=2,WEEK_OF_YEAR=11,WEEK_OF_MONTH=2,DAY_OF_MONTH=9,DAY_OF_YEAR=68,DAY_OF_WEEK=3,DAY_OF_WEEK_IN_MONTH=2,AM_PM=1,HOUR=8,HOUR_OF_DAY=20,MINUTE=37,SECOND=58,MILLISECOND=771,ZONE_OFFSET=28800000,DST_OFFSET=0]
2、Calendar类的常用成员方法
成员方法:
public int get(int field):返回给定日历字段的值
public void set(int field,int value):将给定的日历字段设定为给定值
public abstract void add(int field,int amount):根据日历的规则,为给定的日历字
段添加或减去指定的时间量
public Date gerTIme():返回一个表示此Calendar时间值(从历元到现在的毫秒值偏移
量)的Date对象。
成员方法参数:
int field:日历类的字段,可以使用Calender类的静态成员变量获取
public static final int YEAR=1;年
public static final int MONTH=2;月(西方月份为0-11)
public static final int DATE=5;月中的某一天
public static final int DAY_OF_MONTH=5;月中的某一天
public static final int HOUR=10;时
public static final int MINUTE=12;分
public static final int SECOND=13;秒
- public int get(field):返回给定日历字段的值
- 参数:
- 返回值:日历字段代表的具体的值
public static void main(String[] args) {
Calendar c = Calendar.getInstance();
int year = c.get(Calendar.YEAR);
System.out.println(year);
int month=c.get(Calendar.MONTH);
System.out.println(month);
int day=c.get(Calendar.DATE);
System.out.println(day);
int day2=c.get(Calendar.DAY_OF_MONTH );
System.out.println(day2);
}
输出为 :2021 2 9 9
- public void set(int field,int value):将给定的日历字段设定为给定值
- int field:传递指定日历字段(YEAR,MONTH等)
- int value: 传递的字段设置的具体值
- 单独设置使用两个参数,同时设置年月日使用set的重载方法。
public static void demo02(){
Calendar c = Calendar.getInstance();
c.set(Calendar.YEAR,2001);
c.set(Calendar.MONTH,04);
c.set(Calendar.DATE,21);
//同时使用年月份可以使用set的重载方法
c.set(2000,2,9);
int year = c.get(Calendar.YEAR);
System.out.println(year);
int month=c.get(Calendar.MONTH);
System.out.println(month);
int day=c.get(Calendar.DATE);
System.out.println(day);
}
//输出为:2021 04 021 2000 2 9
- public abstract void add(int field,int amount):根据日历的规则,为给定的日历字
段添加或减去指定的时间量 - int field:传递指定日历字段(YEAR,MONTH等)
- int amount:增加/减少的值
public static void demo03(){
Calendar c = Calendar.getInstance();
c.add(Calendar.YEAR,-20);
c.add(Calendar.MONTH,2);
c.add(Calendar.DATE,12);
int year = c.get(Calendar.YEAR);
System.out.println(year);
int month=c.get(Calendar.MONTH);
System.out.println(month);
int day=c.get(Calendar.DATE);
System.out.println(day);
}
//输出为:2001 4 21
- public Date gerTIme():返回一个表示此Calendar时间值(从历元到现在的毫秒值偏移
量)的Date对象。
public static void demo04() {
Calendar c = Calendar.getInstance();
Date date=c.getTime();
System.out.println(date);
}
//输出为:Tue Mar 09 21:29:36 CST 2021
四、System类
- 提供大量的静态方法,可以获取与系统相关的信息或系统级操作。
1、public static long currentTimeMillis():返回以毫秒为单位的当前时间
- 用来测试程序的效率
例如:验证for循环打印数字1-9999所需使用的时间(毫秒)
- 程序执行前/后分别获取一次毫秒值,并将前后相减
public static void main(String[] args) {
long a =System.currentTimeMillis();
for (int i = 0; i < 9999; i++) {
System.out.println(i);
}
long b= System.currentTimeMillis();
System.out.println("循环遍历用时"+(b-a)+"毫秒");
}
输出:循环遍历用时51毫秒
2、public static void arraycopu(Object src,int srcPos,Object dest,int length)
- 将数组中的指定数据拷贝到另一书数组中
- 参数:
- scr——源数组 srcPos——源数组中的起始位置 dest——目标数组 destPos——目标数据中的起始位置 length——要复制的数组元素的数量
练习:将scr数组的前三个元素,复制到dest数组的前三个位置上
public static void main(String[] args) {
int [] src={1,2,3,4,5};
int [] dest={6,7,8,9,10};
System.out.println("复制前:"+ Arrays.toString(dest));
System.arraycopy(src,0,dest,0,3);
System.out.println("复制后:"+ Arrays.toString(dest));
}
输出为:
复制前:[6, 7, 8, 9, 10]
复制后:[1, 2, 3, 9, 10]
五、StringBuilder类
1、原理
(1)String类:字符串是常量,它们的值在创建之后不能改变。字符串的底层是一个被final修饰的数组,不能改变,是一个常量。
- 进行字符串的相加,内存终究会有多个字符串。占用空间多,效率低下。
(2)StringBuilder类:字符串缓冲区,可以提高字符串的操作效率(看成是一个长度可以变化的字符串)
- 底层也是一个数组但是没有被final修饰可以改变长度
- StringBuilder在内存中始终是一个数组,占用空间少,效率高,如果超出了StringBuilder的容量,会自动的扩容。
2、StringBuilder的构造方法
- public StringBuilder():构造一个空的StringBuilder容器
- public StringBuilder(String str):构造一个StringBuilder容器,并将字符串添加进去。
public static void main(String[] args) {
StringBuilder B1=new StringBuilder();
System.out.println("B1:"+B1);
StringBuilder B2=new StringBuilder("abc");
System.out.println("B2:"+"abc");
}
B1:
B2:abc
3、成员方法
(1)public StringBuilder append():添加任意类型数据的字符串形式,并返回当前对象自身
- 参数:可以是任意的数据类型
public static void main(String[] args) {
StringBuilder B1=new StringBuilder();
StringBuilder B2 = B1.append("abc");
//append返回为this
System.out.println(B1);
System.out.println(B2);
System.out.println(B1==B2);//B1与B2为同一对象,返回值为true
}
abc
abc
true
- 使用append方法不需要接收返回值
- 链式编程:方法的返回值是一个对象,可以根据对象继续调用方法
public static void main(String[] args) {
StringBuilder B1=new StringBuilder();
B1.append("abc").append("nice").append(123);
System.out.println(B1);
}
//输出为:abcnice123
(2)reverse方法
- 字符串反转
B1.reverse();
System.out.println(B1);
//输出为:321ecincba
(3)toString方法
- public String toString():将当前的StringBuilder对象转化为String对象
public static void main(String[] args) {
String str = "Hello!";
System.out.println(str);
//将字符串转化为字符串对象
StringBuilder bu = new StringBuilder(str);
bu.append("Java!");
System.out.println(bu);
//将字符串对象转化为字符串
bu.toString();
System.out.println(bu);
}
Hello!
Hello!Java!
Hello!Java!