JDK中主要的包介绍
1. java.lang——包含一些Java语言的核心类, 如String、 Math、 Integer、 System和Thread, 提供常用功能
2. java.net——包含执行与网络相关的操作的类和接口。
3. java.io ——包含能提供多种输入/输出功能的类。
4. java.util——包含一些实用工具类, 如定义系统特性、 接口的集合框架类、 使用与日期日历相关的函数。
5. java.text——包含了一些java格式化相关的类
6. java.sql——包含了java进行JDBC数据库编程的相关类/接口
7. java.awt——包含了构成抽象窗口工具集(abstract window toolkits) 的多个类, 这些类被用来构建和管理应用程序的图形用户界面(GUI)

包装类Wrapper

针对八种基本数据类型定义相应的引用类型—包装类(封装类)
有了类的特点,就可以调用类中的方法, Java才是真正的面向对象

基本数据类型 包装类
byte Byte
short Short
int Integer
long Long
float Float
double Double
boolean Boolean
char Character

image.png
byte,short,int,long,float,double都是Number的子类
image.png
image.png
Character和Boolean都是Object的直接子类

Primitives:

  • Have performance advantages

Wrappers:

  • Allow us to not violate the “everything is an object” principle, which means that numbers, characters, and boolean values don’t violate this concept
  • Expand the possibilities for working with these values by providing convenient methods and fields
  • Are necessary when a method only works with objects

基本数据类型—->包装类的实例 —-装箱

  1. 通过包装类的构造器实现:

    1. int i = 500;
    2. Integer i1 = new Integer(i);
  2. 还可以通过字符串参数构造包装类对象: ```java Float f = new Float(“4.56”); Float f1 = new Float(4.56f); Float f2 = new Float(4.56); //2行和三行都行,有个重载方法在里面 //long = new Long(“asdf”); //NumberFormatException

Boolean b1 = new Boolean(true); //true Boolean b2 = new Boolean(“true”);//true //凡是忽略大小写不为true的字符串,全都是false,null传进去也是false //这块不清楚看下源码就行,很容易理解 Boolean b3 = new Boolean(“true123”); //false Boolean b4 = new Boolean(null); //false Boolean b5; //null

  1. 包装类对象--->基本类型变量 ---拆箱<br />调用包装类的.xxxValue()方法:
  2. ```java
  3. boolean b = bObj.booleanValue();

JDK1.5之后,支持自动装箱,自动拆箱。但类型必须匹配
字符串—-> 基本类型/包装类
对应包装类的parseXxx(String)静态方法
image.png

从键盘获取输入

java.util.Scanner

  1. /*
  2. 如何从键盘获取不同类型的输入
  3. Scanner
  4. */
  5. import java.util.Scanner;
  6. public class ScannerTest{
  7. public static void main(String args[]){
  8. Scanner scan = new Scanner(System.in);
  9. Student s1 = new Student(scan.next(), scan.next(), scan.nextInt(), scan.nextDouble());
  10. s1.print();
  11. }
  12. }
  13. class Student{
  14. int age;
  15. String sex;
  16. String name;
  17. double height;
  18. Student(String name, String sex, int age, double height){
  19. this.age = age;
  20. this.sex = sex;
  21. this.name = name;
  22. this.height = height;
  23. }
  24. void print(){
  25. System.out.println(name);
  26. System.out.println(sex);
  27. System.out.println(age);
  28. System.out.println(height);
  29. }
  30. }

获取当前时间

java.lang.System
该类中有一个方法: currentTimeMillis()
image.png

Date

每个 Date 对象以一种非常有趣的形式存储时间:自格林威治标准时间 1970 年 1 月 1 日以来的毫秒数

按照中国时区来看就是1970/01/01 8:00

每个对象在创建时都以当前时间进行初始化。要知道当前时间,只需创建一个 Date 对象。

获取当前日期:

  1. public static void method1() {
  2. // 初始化 Date 对象
  3. Date date = new Date();
  4. // 使用 toString() 函数显示日期时间
  5. System.out.println(date.toString());
  6. }

image.png
计算两个日期之间的差值

  1. public static void main(String[] args) throws Exception
  2. {
  3. Date currentTime = new Date(); // 获取当前日期和时间
  4. Thread.sleep(3000); // 等待 3 秒(3000 毫秒)
  5. Date newTime = new Date(); // 获取新的当前时间
  6. long msDelay = newTime.getTime() - currentTime.getTime(); // 计算差值
  7. System.out.println("时间差值为:" + msDelay + ",以毫秒表示");
  8. }

主要是Date类的 getTime() 方法的使用,返回该Date实例的毫秒值!

image.png
确定自当天开始经过了多少时间:

  1. public static void main(String[] args) throws Exception
  2. {
  3. Date currentTime = new Date();
  4. int hours = currentTime.getHours();
  5. int mins = currentTime.getMinutes();
  6. int secs = currentTime.getSeconds();
  7. System.out.println("自午夜以来的时间 " + hours + ":" + mins + ":" + secs);
  8. }

主要是 getHours() getMinutes() getSeconds() 这几个方法的使用

image.png
确定自年初开始经过了多少天:

  1. public static void main(String[] args) throws Exception
  2. {
  3. Date yearStartTime = new Date();
  4. yearStartTime.setHours(0);
  5. yearStartTime.setMinutes(0);
  6. yearStartTime.setSeconds(0);
  7. yearStartTime.setDate(1); // 当月第一天
  8. yearStartTime.setMonth(0); // 一月(从 0 到 11 对月份编制索引)
  9. Date currentTime = new Date();
  10. long msTimeDifference = currentTime.getTime() - yearStartTime.getTime();
  11. long msDay = 24 * 60 * 60 * 1000; // 24 小时内的毫秒数
  12. int dayCount = (int) (msTimeDifference/msDay); // 完整天数
  13. System.out.println("自年初以来的天数:" + dayCount);
  14. }

2021/3/15

image.png

总结

getTime() 方法返回 Date 对象中存储的毫秒数。”
after() 方法检查 调用该方法的日期 是否在 传递给该方法的日期 之后”。类似的还有 before() equals()
getHours()、getMinutes()、getSeconds() 方法分别为调用它们的对象返回小时数、分钟数和秒数。”

SimpleDateFormat

SimpleDateFormat 是一个以语言环境敏感的方式来格式化和分析日期的类。SimpleDateFormat 允许你选择任何用户自定义日期时间格式来运行。

日期和时间的格式化编码

时间模式字符串用来指定时间格式。在此模式中,所有的 ASCII 字母被保留为模式字母,定义如下:

字母 描述 示例
G 纪元标记 AD
y 四位年份 2001
M 月份 July or 07
d 一个月的日期 10
h A.M./P.M. (1~12)格式小时 12
H 一天中的小时 (0~23) 22
m 分钟数 30
s 秒数 55
S 毫秒数 234
E 星期几 Tuesday
D 一年中的日子 360
F 一个月中第几周的周几 2 (second Wed. in July)
w 一年中第几周 40
W 一个月中第几周 1
a A.M./P.M. 标记 PM
k 一天中的小时(1~24) 24
K A.M./P.M. (0~11)格式小时 10
z 时区 Eastern Standard Time
文字定界符 Delimiter
单引号 `

用法1:以特定形式将Date —> String

  1. SimpleDateFormat aDate=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
  2. SimpleDateFormat bDate=new SimpleDateFormat("yyyy-MMM-dddddd");
  3. long now=System.currentTimeMillis();
  4. System.out.println(aDate.format(now));
  5. System.out.println(bDate.format(now));
  6. SimpleDateFormat myFmt=new SimpleDateFormat("yyyy年M月dd日 HH时mm分ss秒");
  7. SimpleDateFormat myFmt1=new SimpleDateFormat("yy/MM/dd HH:mm");
  8. SimpleDateFormat myFmt2=new SimpleDateFormat("yyyy-MM-dd hh:mm:ss a");
  9. SimpleDateFormat myFmt3=new SimpleDateFormat("yyyy年MM月dd日 HH时mm分ss秒 E ", Locale.ENGLISH);
  10. SimpleDateFormat myFmt4=new SimpleDateFormat("一年中的第 D 天 一年中第w个星期 一月中第W个星期 在一天中第k时 z时区");
  11. System.out.println(myFmt.format(now));
  12. System.out.println(myFmt1.format(now));
  13. System.out.println(myFmt2.format(now));
  14. System.out.println(myFmt3.format(now));
  15. System.out.println(myFmt4.format(now));

M MM MMM 的不同前两个都是阿拉伯数字表示的月份,区别在于是一位还是两位,当然如果用 M 而一位无法表示就会用两位表示,比如11 MMM 是用当地语言表示的月份,比如我现在在中国,11月的表示方式就是 十一月 ,而如果在英语系国家,使用 Nov 表示 MMMM 如果是英语表示的话是全称: November 💎

E EE EEE 在英语表示中都是星期的缩写, EEEE 是全称 上述四种在中文表示中都是 星期一 的意思

image.png

举个例子:展示M的不同数量的区别

  1. SimpleDateFormat ft = new SimpleDateFormat ("yyyy-MMM-dd");
  2. String input = "1818-十一月-11";
  3. System.out.print(input + " Parses as ");
  4. Date t;
  5. try {
  6. t = ft.parse(input);
  7. System.out.println(t);
  8. } catch (ParseException e) {
  9. System.out.println("Unparseable using " + ft);
  10. }

image.png

Calendar

参考文档
用Calendar取代Date,仅仅用Date的getTime()方法获取当前时间的毫秒值进行时间的记录

When working with the Calendar class, it’s important to understand that this is just that, a calendar, not an individual date.

This is abundantly apparent if you try to display the Calendar object:
Output: java.util.GregorianCalendar[time=?,areFieldsSet=false,areAllFieldsSet=false,lenient=true,zone=sun.util.calendar.ZoneInfo[id=”Europe/London”,offset=0,dstSavings=0,useDaylight=false,transitions=79,lastRule=null],firstDayOfWeek=2,minimalDaysInFirstWeek=1,ERA=?,YEAR=2017,MONTH=0,WEEK_OF_YEAR=?,WEEK_OF_MONTH=?,DAY_OF_MONTH=25,DAY_OF_YEAR=?,DAY_OF_WEEK=?,DAY_OF_WEEK_IN_MONTH=?,AM_PM=0,HOUR=0,HOUR_OF_DAY=0,MINUTE=0,SECOND=0,MILLISECOND=?,ZONE_OFFSET=?,DST_OFFSET=?]
_

Calendar —> Date

使用Calendar的getTime()函数返回Calendar实例对应的Date对象
image.png