20201012 王维

学习总结

1. Date

java.util.Date 表示特定的时间,用来表示时间和日期,提供一系列操作

public class Date
implements java.io.Serializable, Cloneable, Comparable<Date>
  • 获取的当前时间是系统的时间和日期
  • 1天= 24×60×60 = 86400秒
  • 计算机标准是根据Greenwich(格林威治)标准时间(GMT),由于中国属于东八区,所以要比 GMT 时间早8个小时

类的所有方法 Date 接受或返回年,月,日,小时,分钟和秒值,数据遵守以下规范:

  • y 年代表整数 y – 1900 。
  • 一个月由0到11的整数表示; 0是1月,1是2月,等等,11是12月
  • 日期(月的一天)以通常的方式从1到31的整数表示。
  • 一小时由0到23之间的整数表示。因此,从午夜到凌晨1点的时间是小时0,从中午到下午1点的小 时是12小时。 一般以0〜59的整数表示 minute 。
  • 秒由0到61的整数表示; 值60和61仅发生在闰秒上,甚至仅在实际上正确跟踪闰秒的Java实现中发 生。 由于目前引入闰秒的方式,在同一分钟内不会发生两个闰秒,但是本规范遵循ISO C的日期和时间约定。

在所有情况下,为这些目的而提供的方法的论证不必在指定范围内; 例如,可以将日期指定为1月32日, 并将其解释为2月1日

1.1 成员变量

 private transient long fastTime;//保存Date所表示的时间

1.2 构造方法

大部分构造方法被弃用,以下两个还未被弃用

Constructor Description
Date() 分配一个 Date 对象,并初始化它,当前系统时间
Date(long date) 分配一个 Date 对象, date 毫秒。即1970年1月1日00:00:00 GMT 以来的 毫秒数

注意: CST 表示 China Standard Time (中国标准时间)

1.3 成员方法

Date 中大部分方法都已经经被弃用,仅存在以下成员方法:

Method Type Description
after(Date when) boolean 测试此日期是否在指定日期之后
before(Date when) boolean 测试此日期是否在指定日期之前
equals(Object obj) boolean 比较两个日期相等
getTime() long 自1970年1月1日以来,以此日期为准的00:00:00 GMT的毫 秒数
setTime(long time) void 设置此 Date对象以表示1970年1月1日00:00:00 GMT后的 time毫秒的时间点
toString() String 将此 Date 对象转换为 String 的形式

其中 toString() 的格式是: dow mon dd hh:mm:ss zzz yyyy

  • dow 是星期几( Sun, Mon, Tue, Wed, Thu, Fri, Sat )。
  • mon 是月( Jan, Feb, Mar, Apr, May, Jun, Jul, Aug, Sep, Oct, Nov, Dec )。
  • dd 是一个月的某天( 01 到 31 ),作为两位十进制数字。
  • hh 是一天的小时( 00 到 23 ),作为两位十进制数字。
  • mm 是一小时内的分钟( 00 至 59 ),为两位十进制数字。
  • ss 是分钟内的秒( 00 到 61 ),作为两位十进制数字。
  • zzz 是时区。 标准时区缩写包括通过方法 parse识别的缩写 。 如果时区信息不可用,那么 zzz 是 空的 – 也就是说,它根本没有字符。
  • 年份 为 yyyy ,为四位十进制数字

1.4 比较Date对象

Date 对象的比较可以通过 equals 、 after 、 before 方法实现

now.after(first)返回值为true表示nowfirst之后

equals比较,Date重写了从Object继承的equals方法 ,内部实现是 obj instanceof Date && getTime() == ((Date) obj).getTime()

1.5 Date实例是可变的

Date 实例(对象)创建后,内部的毫秒值 fastTime 是可以改变的。

2 Calendar

java.util.Calendar 是一个抽象类。也是用来操作日期和时间的类,他可以看作Date 类的一个增强版。它提供了一组方法,语序把一个以毫秒为单位的时间转换成年月日时分秒。默认显示的是当前时间,也可以查看其它时间。时间上的瞬间可以用毫秒值表示,该值是从1970年1月1日00:00 00: 00.000 GMT

public abstract class Calendar implements Serializable, Cloneable,
Comparable<Calendar>

由于该类是抽象类,所以不能直接实例化,在类中提供了一个方法 Calendar.getInstance(); ,这个方法返回了一个Calendar类的对象,其实这个获得的对象是他的子类的对象,其日历字段已使用当前日期和时间进行初始化。

2.1 类变量

  • Calendar.ERA 对应纪元 比如罗马儒略历中的 AD 或 BC ( 中文表示为 公元 或 公元前 )
  • Calendar.YEAR 对应年份
  • Calendar.MONTH 对应月份 月份从 0 开始计数,0 表示 January (一月),1 表示 February ( 二月 )
  • Calendar.DATE 对应月份中的日期 日期从 1 开始计数,有效范围为 1 ~ 31 。
  • Calendar.DAY_OF_MONTH也表示对应月份中的日期 日期从 1 开始计数,有效范围为 1 ~ 31 。
  • Calendar.HOUR 对应上午或下午的小时 小时从 0 开始计数,有效范围为 0 ~ 11 。
  • Calendar.MINUTE 对应分钟 分钟从 0 开始计数,有效范围为 0 ~ 59 。
  • Calendar.SECOND 对应秒 秒数从 0 开始计数,有效范围为 0 ~ 60 。(要注意闰秒)
  • Calendar.MILLISECOND 对应毫秒 毫秒数从 0 开始计数,有效范围为 0 ~ 999 。
  • Calendar.HOUR_OF_DAY 对应一天当中的小时 小时从 0 开始计数,有效范围为 0 ~ 23 。
  • Calendar.DAY_OF_MONTH 对应月份中的日期 日期从 1 开始计数,有效范围为 1 ~ 31 。
  • Calendar.DAY_OF_WEEK 对应星期 用于指示一个星期中的某天。 该字段可取的值可以是 SUNDAY 、 MONDAY 、 TUESDAY 、 WEDNESDAY 、 THURSDAY 、 FRIDAY 和 SATURDAY 。
  • Calendar.DAY_OF_WEEK_IN_MONTH表示对应月份中这一天所在的这一周是第几周
  • Calendar.DAY_OF_YEAR 对应年份中的天数 指示当前年中的天数。一年中第一天的值为 1,最大值为 366 。
  • Calendar.AM 表示一天午夜到中午之前的时间,即上午
  • Calendar.PM 表示从中午到午夜之前的一天中的一段时间,即下午

2.2 获取Calendar对象

Calendar 类中提供了大量的 static 方法用于获取 Calendar 对象

Calendar c = Calendar.getInstance(); //使用默认时区和区域设置获取日历
Calendar c1 = Calendar.getInstance(Locale.CHINA);//使用默认时区和指定的区域设置获
取日历
Calendar.getInstance(TimeZone.getDefault());//使用指定的时区和默认语言环境获取日历
Calendar.getInstance(TimeZone.getDefault(), Locale.CHINA);//获取具有指定时区和区
域设置的日历

java.util.GregorianCalendarCalendar 类的子类,并提供了世界上大多数国家使用的标准日历系统。通过 GregorianCalendar 对象即可使用 Calendar 中的方法

Calendar calendar = new GregorianCalendar();
System.out.println(calendar);

2.3 成员方法

2.3.1 获取时间

获取 Calendar 对象所表示的某个特定瞬间所对应的毫秒值

public long getTimeInMillis();

获取 Calendar 对象所表示的某个特定瞬间的 指定字段 所对应的值

public int get(int field);//field是前面提到的Calendar的类变量

2.3.2 设置/清除Calendar 对象值

Calendar 类中提供了一下方法用于设置 日历字段 的值

public void set(int field, int value)

同时也提供了一下方法来批量设置 日历字段 值

public final void set(int year, int month, int date);
public final void set(int year, int month, int date, int hourOfDay, int
minute);
public final void set(int year, int month, int date, int hourOfDay, int
minute, int second)

另外, Calendar 类中提供了清空指定 日历字段 值的方法

public final void clear(int field);

Calendar 类中还提供了清空所有 日历字段 值的方法

public final void clear();

2.3.3 Calendar 对象和Date 对象互相转换

Calendar 类中提供了将 Calendar 对象所表示的某一特定瞬间转换成 Date 对象的方法

public final Date getTime();

Calendar 类中提供了将 Date 对象转换成 Calendar 对象所表示的某一特定瞬间的方法

public final void setTime(Date date);

3 DateFormat

java.text.DateFormat 是日期/时间格式化子类的抽象类。它可以将日期时间格式化和将字符串解析为 Date

public final String format(Date date);//格式化
public Date parse(String source);//解析字符串为Date

但是, DateFormat 是一个抽象类。所以使用时使用其子类 SimpleDateFormat

SimpleDateFormat 的构造方法

public SimpleDateFormat();
public SimpleDateFormat(String pattern);
public SimpleDateFormat(String pattern, Locale locale);
public SimpleDateFormat(String pattern, DateFormatSymbols formatSymbols);

最常用的是 public SimpleDateFormat(String pattern) ,其中 pattern 表示日期的格式,日期格 式规则如下:比如 yyyy-MM-dd 对应 1995-01-01

3.1 Date格式化

 public final String format(Date date)

3.2 将字符串解析为Date对象

public Date parse(String source) throws ParseException

如果格式不正确,可能抛出 ParseException 异常,因此需要使用try-catch进行异常处理

4 JDK 8新增

4.1 LocalDate

java.time.LocalDate 是一个不可变( final 修饰)的日期时间对象,是线程安全的,表示日期,通常被 表示为年月日。也可以访问其他日期字段,例如星期

4.1.1 字段

LocalDate 中声明了三个字段来存储年、月、日

// The year.
private final int year;
// The month-of-year.
private final short month;
//The day-of-month.
private final short day;

因为它们都是 final 修饰的,因此一旦创建 LocalDate 实例,其 年份、月份、日期 的值再也不能被更改。

另外, LocalDate 类还声明了以下常量:

public static final LocalDate MIN = LocalDate.of( Year.MIN_VALUE, 1, 1
);//-999999999-01-01
public static final LocalDate MAX = LocalDate.of( Year.MAX_VALUE, 12, 31
);//+999999999-12-31

JDK 9 及之后版本还声明了以下常量

public static final LocalDate EPOCH = LocalDate.of( 1970, 1, 1 );

表示 记元 对应的日期

4.1.2 获取LocalDate 实例

java.time.LocalDate 类提供了许多 类方法 用于获取 LocalDate 实例

public static LocalDate now();
public static LocalDate now(ZoneId zone);
public static LocalDate now(Clock clock);

public static LocalDate of(int year, Month month, int dayOfMonth);
public static LocalDate of(int year, int month, int dayOfMonth);
public static LocalDate ofYearDay(int year, int dayOfYear);
public static LocalDate ofEpochDay(long epochDay);

常用的是 now()of(int year , int month , int dayOfMonth)ofYearDay(int year , int dayOfYear)

4.1.3 常用实例方法

LocalDate 类中定义了大量的实例方法,其中比较常用的是:

public int getYear() //用于获取年份
public int getMonthValue() //用于获取月份 ( 取值范围是 1 ~ 12 )
public int getDayOfMonth() //用于获取日期 ( 取值范围是 1 ~ 31 )
public DayOfWeek getDayOfWeek() //用于获取星期 ( 返回类型为 DayOfWeek )
public boolean isLeapYear() //用于判断 LocalDate 实例对应的年份是否是闰年
public int lengthOfYear() //用于获取 LocalDate 实例对应的年份的总天数
public int lengthOfMonth() //用于获取 LocalDate 实例对应的月份的总天数

LocalDate 类中提供了 LocalDate 对象之间相互比较的方法

public boolean isEqual(ChronoLocalDate other);
public boolean equals(Object obj);
public boolean isAfter(ChronoLocalDate other);
public boolean isBefore(ChronoLocalDate other);

同时, LocalDate 类中还提供了在指定 LocalDate 基础上增加/减少指定时间的方法

//增加
public LocalDate plusYears(long yearsToAdd);
public LocalDate plusDays(long daysToAdd);
public LocalDate plusMonths(long monthsToAdd);
public LocalDate plusWeeks(long weeksToAdd);
//减少
public LocalDate minusYears(long yearsToSubtract);
public LocalDate minusMonths(long monthsToSubtract);
public LocalDate minusWeeks(long weeksToSubtract);
public LocalDate minusDays(long daysToSubtract);

如果调用增加方法传负数的话就相当于减少,所以一般都是使用增加方法。

4.2 LocalTime

java.time.LocalTime 是一个不可变( final )的日期时间对象,代表一个时间。 时间表示为纳秒精度。它不存储或表示日期或时区。

public final class LocalTime
implements Temporal, TemporalAdjuster, Comparable<LocalTime>,
Serializable

java.time.LocalTime 类中声明了四个字段用来存储 小时、分钟、秒、纳秒:

// The hour.
private final byte hour;
// The minute.
private final byte minute;
// The second.
private final byte second;
// The nanosecond.
private final int nano;

因为它们都是 final 修饰的,因此一旦创建 LocalTime 实例,其中各个字段的值再也不能被更改

4.2.1 获取 LocalTime 实例

java.time.LocalTime 类提供了许多 类方法 用于获取 LocalTime 实例,以下是几个常用的方法

public static LocalTime now()
public static LocalTime of(int hour, int minute)
public static LocalTime of(int hour, int minute, int second)
public static LocalTime of(int hour, int minute, int second, int nanoOfSecond)

4.2.2 常用的成员方法

LocalTime 类中定义了大量的实例方法,其中比较常用的是:

public int getHour() //用于获取小时 (取值范围为 0 ~ 23 )
public int getMinute() //用于获取分钟 (取值范围为 0 ~ 59 )
public int getSecond() //用于获取秒 (取值范围为 0 ~ 59 )
public int getNano() //用于获取纳秒 (取值范围为 0 ~ 999999999 )

同时, LocalTime 类中定义了用于比较 LocalTime 实例的方法:

public boolean isAfter(LocalTime other);
public boolean isBefore(LocalTime other);
public boolean equals(Object obj);

另外, LocalTime 类还定义了 在指定的 LocalTime 对应的时间基础上 增加或减少指定时间的方法:

//增加
public LocalTime plusHours(long hoursToAdd);
public LocalTime plusMinutes(long minutesToAdd);
public LocalTime plusSeconds(long secondstoAdd);
public LocalTime plusNanos(long nanosToAdd);
//减少 将方法中的plus换成minus

增加的方法中参数传入负数就等同于减少指定时间,

4.3 LocalDateTime

java.time.LocalDateTime 是一个不可变的日期时间对象,代表日期时间。

public final class LocalDateTime
implements Temporal, TemporalAdjuster,
ChronoLocalDateTime<LocalDate>, Serializable 

java.time.LocalDateTime 类中声明了两个实例字段用来存储 日期 和 时间 :

// The date part.
private final LocalDate date;
// The time part.
private final LocalTime time;

可以看出其实 LocalDateTime 底层就是一个 LocalDate + LocalTime

这里需要注意,不仅仅 datetime 字段是 final 修饰的, LocalDateLocalTime 类中的实例字段也是 final 修饰的,因此 LocalDateTime 的实例一经创建,其内部的各项取值都是不可更改 的。

4.3.1 获取LocalDateTime 实例

java.time.LocalDateTime 中提供了很多获取 LocalDateTime 实例的方法,其中常用的有:

public static LocalDateTime now();
public static LocalDateTime of(int year, int month, int dayOfMonth, int
hour, int minute);
public static LocalDateTime of(int year, int month, int dayOfMonth, int
hour, int minute, int second);
public static LocalDateTime of(int year, int month, int dayOfMonth, int
hour, int minute, int second, int nanoOfSecond);
public static LocalDateTime of(LocalDate date, LocalTime time);

LocalDateTime类中提供了 LocalDateTime 对象之间相互比较的方法,还定义了 在指定的 LocalDateTime 对应的时间基础上增加或减少指定时间的方法。

4.3.2 获取日期时间值

LocalDateLocalTime 类 类似

5. File

java.io.File 类是文件和目录 路径名 的抽象表示,主要用于文件和目录的创建、查找和删除等操 作。

Java虚拟机中的一个 File 实例表示一个路径,这个路径可能对应一个文件或一个目录 。

File 类的实例所表示的路径,可能存在于磁盘上,也可能在磁盘上根本不存在。

public class File
implements Serializable, Comparable<File>

File 类是不可变的; 也就是说,一旦创建,由 File 对象表示的抽象路径名永远不会改变。

private final String path;//用于存储file实例表示的路径

File类提供了用于操作文件或目录的方法,但并不支持访问文件的内容。 访问文件中的内容,需要通过文件输入流来实现。

5.1 常量

File 类提供了 4 个表示分隔符的常量:

不同的系统平台下,这四个常量的取值也不相同

Windows 平台下 :

  • pathSeparatorpathSeparatorChar 对应的是 ;
  • separatorseparatorChar 对应的是\

Unix / Linux / OS X 平台下 :

  • pathSeparatorpathSeparatorChar 对应的是 :
  • separatorseparatorChar 对应的是 /

Windows 下文件路径各层级之间使用 \分隔,在代码中 \ 需要转义(使用 \ 转义),当然还有另外 一种方法来分隔,就是使用 / 来分隔。

5.2 构造方法

构造方法 描述
public File ( String pathname ) 通过将给定路径名字符串转换为抽象路径名来创建一个新的 File实例
public File ( String parent , String child ) 根据parent 路径名字符串和child路径名字符串创建一个新的File实例
public File ( File parent , String child ) 根据parent抽象路径名和chile路径名字符串创建一个新的File实例
public File ( URI uri) 通过将给定的fileURI转换为一个抽象路径名来创建一个新的File实例

1.3 实例方法

1.3.1 判断是否存在

File 类中的 exists 方法用于判断File实例所表示的路径是否在磁盘上存在:

public boolean exists()

File实例所表示的路径在磁盘上存在时返回 true ,否则返回 false

1.3.2 判断是否是文件

File 类中的 isFile 方法用于判断File实例所表示的路径是否是个文件:

public boolean isFile()

File实例所表示的路径在磁盘上 存在 并且 是个文件 时返回 true,否则返回 false

1.3.3 判断是否是目录

File类中的 isDirectory 方法用于判断File实例所表示的路径是否是个目录:

public boolean isDirectory()

File实例所表示的路径在磁盘上存在并且 是个目录 时返回 true ,否则返回 false

1.3.4 判断是否是隐藏文件

File类中的 isHidden方法用于判断File实例所表示的路径是否是隐藏目录或隐藏文件:

 public boolean isHidden()

File实例所表示的路径是个隐藏目录或隐藏文件时返回 true ,否则返回 false

1.3.5 判断是否是绝对路径

绝对路径:从根路径开始的路径 相对路径:相对于文件本身的路径

File类中的 isAbsolute 方法用于判断File实例所表示的路径是否是 绝对路径 :

public boolean isAbsolute()

File实例所表示的路径是绝对路径时返回 true ,否则返回 false

1.3.6 获取路径及名称

File类提供了获取File实例所表示路径对应的目录或文件的名称:

public String getName()

同时也提供了获取File实例所表示路径的方法(以字符串形式返回):

public String getPath()

1.3.7 获取访问时间

File类提供了获取文件或目录最后修改时间(以毫秒计)的方法:

 public long lastModified()

1.3.8 获取文件长度

File 实例所表示的路径在磁盘上存在,并且是个文件时,可以通过length 方法来获取文件的长度(体积):

public long length()

该方法所返回的文件长度以字节为单位。 如果File实例所表示的路径是一个目录,则返回值是不确定的。 如果File实例所表示的路径在磁盘上是不存在,则返回 0L

1.3.9 获取项目列表

File类提供了获取指定目录中所包含的子目录和文件列表的方法:

获取File实例所表示路径对应的目录中所有子目录名称及文件名称组成的数组

 public String[] list()

获取File实例所表示的目录内所有目录和文件对应的File数组

public File[] listFiles()

心得体会

今天学习的知识难度没有多大,比较容易理解,但是知识很多,内容和庞大,量大。

标签

评论