目录
2.Date 日期对象 SimpleDateFormat 格式化日期
#日期相关工具类
1.Calendar 日历对象
//获取日期的实例对象
Calendar calendar = Calendar.getInstance();
System.out.println("年:"+calendar.get(Calendar.YEAR));
//月份是从0-11
//由于前面有字符串,所以calendar.get(Calendar.MONTH)+1 需要用括号括起来
//不加括号,会calendar.get(Calendar.MONTH)+1会被认为是字符串拼在一起,结果会由2变成11
System.out.println("月:"+(calendar.get(Calendar.MONTH)+1));
System.out.println("日:"+calendar.get(Calendar.DAY_OF_MONTH));
//一天中的第几个小时
System.out.println("时:"+calendar.get(Calendar.HOUR_OF_DAY));
System.out.println("分:"+calendar.get(Calendar.MINUTE));
System.out.println("秒:"+calendar.get(Calendar.SECOND));
//星期天就是一周的第一天
System.out.println("星期"+calendar.get(Calendar.DAY_OF_WEEK));
//12小时
System.out.println("时:"+calendar.get(Calendar.HOUR));
running:
年:2023
月:2
日:18
时:14
分:13
秒:31
星期7
时:2
例题:计算你的年龄
//获取日期的实例对象
Calendar calendar = Calendar.getInstance();
//设置时间
calendar.set(2001,1,1,0,0,0);
//返回一个 Date表示此物体 Calendar的时间值
Date time = calendar.getTime();
//System.currentTimeMillis()获取系统当前时间,单位是微秒
System.out.println((System.currentTimeMillis()-time.getTime())/1000/60/60/24/365);
2.Date 日期对象 SimpleDateFormat 格式化日期
Date date = new Date();
System.out.println("系统时间:"+date);
//"yyyy-MM-dd HH:mm:ss" 大小写不是随便写的
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
//Date-->String
String s=dateFormat.format(date);
System.out.println(s);
running:
系统时间:Sat Feb 18 14:15:49 CST 2023
2023-02-18 14:15:49
//String日期描述--->Date
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String str="2023-02-18 14:20:30";
Date date = dateFormat.parse(str);
System.out.println("Date--->"+date);
running:
Date--->Sat Feb 18 14:20:30 CST 2023
3.DateFormat 格式化日期
DateFormat format = DateFormat.getDateInstance();
Date date1 = new Date();
System.out.println("系统时间--->"+date1);
String format1 = format.format(date1);
System.out.println(format1);
running:
系统时间--->Sat Feb 18 14:30:39 CST 2023
2023-2-18
#包装器类型
1.Java中的包装类型
1)使用原始数据类型声明的变量,如:
- int num = 10;
- 这里的num只是一个变量,而不是对象;
2)Java提供一系列包装类,以便将原始数据类型当作对象进行操作。
好处:基本数据类型封装成对象,在对象中定义了属性和方法,可以方便的操作该数据(得
到整型最大值,最小值,进制转换等等)。
3)在java.lang包中,对于每个基本数据类型都有一个相应的包装类。
4)Java语言中的8个包装器类型如下所示:
- 除了整型及字符型外,其他的包装器类型名字都是将基本数据类型首字母变大写即可;
- 以Integer类为例,可以把int类型转换成Integer引用类型;
2.Java中的包装类型-Integer类
以Integer为例:
- 包装类在程序开发中主要用于基本数据类型和字符串之间的转换
示例:
public class demo {
public static void main(String[] args){
String count = "10";
//字符串转成基本数据类型int
int c = Integer.parseInt(count);
System.out.println(c+"--->"+getType(c));
}
//获取变量类型方法
public static String getType(Object o) {
return o.getClass().toString();
}
}
running:
10--->class java.lang.Integer
1)Integer的构造方法
赋值的两种方式:
- 构造方法赋值:Integer i = new Integer(11);
- 等号赋值:Integer i = 10;
2)Integer静态方法
除了Character类以外,其它的包装类都有静态的parseXxx方法(Xxx指代具体的数据类型),用于将字符串转换成相对应的基本数据类型值。
示例:
public class demo {
public static void main(String[] args) {
String str = "555";
//分别调用各个包装类的paseXxx方法对字符串进行转换,如果转换失败,将报异常
int i = Integer.parseInt(str);
System.out.println(i + "--->" + getType(i));
double j = Double.parseDouble(str);
System.out.println(j + "--->" + getType(j));
}
public static String getType(Object o) {
return o.getClass().toString();
}
}
running:
555--->class java.lang.Integer
555.0--->class java.lang.Double
3.Java中的包装类型-Character类
1)Character类中的常用方法:
注意:以上方法都是静态方法,可以直接通过类名调用,返回值均 为boolean类型,如果是返回true,否则返回false。
示例:
char[] charArray = {'*', '7', 'b', ' ', 'A'};
for (int i = 0; i < charArray.length; i++) {
if (Character.isDigit(charArray[i])) {
System.out.println(charArray[i] + "是一个数字。");
}
if (Character.isLetter(charArray[i])) {
System.out.println(charArray[i] + "是一个字母。");
}
if (Character.isWhitespace(charArray[i])) {
System.out.println(charArray[i] + "是一个空格。");
}
if (Character.isLowerCase(charArray[i])) {
System.out.println(charArray[i] + "是小写形式。");
}
if (Character.isUpperCase(charArray[i])) {
System.out.println(charArray[i] + "是大写形式。");
}
}
running:
7是一个数字。
b是一个字母。
b是小写形式。
是一个空格。
A是一个字母。
A是大写形式。
4.Java自动装箱与拆箱的使用方法
- 装箱:基本数据类型转换为包装器类型,称为装箱(boxing);
例如,int型转换为Integer类型;
- 拆箱:包装器类型转换为基本数据类型,称为拆箱(unboxing);
例如Integer类型转换为int类型;
一、
JDK1.5以后,装箱拆箱可以自动进行;例如:
二、
- 在自动装箱拆箱过程中,Java使用到了常量池;
- 常量池就是方法区的一部分,是内存的逻辑分区;
- 如下代码所示,i1、i2使用到了自动装箱,io1和io2则没有使用:
- i1 i2使用到常量池,io1、io2没有使用
三、
- i1 i2使用到常量池,io1、io2没有使用;
- i1和i2的值都是10,所以指向常量池中相同的空间;因此i1==i2返回true;
- io1和io2使用new创建赋值,所以分别指向堆中不同的空间,因此io1==io2返回false;
四、
如下代码所示,i3、i4使用到了自动装箱,io3和io4则没有使用:
- 原因:在自动装箱拆箱过程中,只有数值是byte范围内的时候,才使用到常量池,否则都是分配新的内存空间;
- 1000早就超出了byte的范围,所以i3/i4是两个空间;