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
表示now
在first
之后
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.GregorianCalendar
是 Calendar
类的子类,并提供了世界上大多数国家使用的标准日历系统。通过 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
。
这里需要注意,不仅仅 date
和 time
字段是 final
修饰的, LocalDate
、 LocalTime
类中的实例字段也是 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 获取日期时间值
和LocalDate
、 LocalTime
类 类似
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
平台下 :
pathSeparator
和pathSeparatorChar
对应的是;
separator
和separatorChar
对应的是\
Unix
/ Linux
/ OS X
平台下 :
pathSeparator
和pathSeparatorChar
对应的是:
separator
和separatorChar
对应的是/
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) | 通过将给定的file :URI 转换为一个抽象路径名来创建一个新的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()
心得体会
今天学习的知识难度没有多大,比较容易理解,但是知识很多,内容和庞大,量大。
近期评论