Java 的API

Java 的API(API: Application(应用) Programming(程序) Interface(接口))

Java API就是JDK中提供给我们使用的类,这些类将底层的代码实现封装了起来,我们不需要关心这些类是如何实现的,只需要学习这些类如何使用即可。

在JDK安装目录下有个src.zip文件,这个文件解压缩后里面的内容是所有Java类的源文件。可以在其中查看相对应的类的源码。

Date类

类 Date 表示特定的瞬间,精确到毫秒。

Date类构造方法

继续查阅Date类的描述,发现Date拥有多个构造函数,只是部分已经过时,但是其中有未过时的构造函数可以把毫秒值转成日期对象。

Constructor and Description
Date(int year, int month, int day)
已弃用
而是使用构造Date(long date)
Date(long date)
使用给定的毫秒时间值构造一个 Date对象。
//创建日期对象,把当前的毫秒值转成日期对象
Date date = new Date(1607616000000L);
System.out.println(date);
//打印结果:Fri Dec 11 00:00:00 CST 2020

toString()方法

自定义格式化日期转义格式 比如 yyyy-mm-dd 从 JDK 1.1 开始,由 DateFormat.format(Date date) 取代

getTime()方法 Date类

把日期对象转换成对应的时间毫秒值

DateFormat类

DateFormat 是日期/时间格式化子类的抽象类,它以与语言无关的方式格式化并解析日期或时间。日期/时间格式化子类(如 SimpleDateFormat类)允许进行格式化(也就是日期 -> 文本)、解析(文本-> 日期)和标准化。

通过这个类可以帮我们完成日期和文本之间的转换。

DateFormat类构造方法

要格式化一个当前语言环境下的日期也就是日期 -> 文本),要通过下面的方法来完成。DateFormat是抽象类,我们需要使用其子类SimpleDateFormat来创建对象。

Modifier Constructor and Description
protected DateFormat()
创建一个新的日期格式。
Constructor and Description
SimpleDateFormat()
构造一个 SimpleDateFormat使用默认模式和日期格式符号为默认的 FORMAT区域设置。
SimpleDateFormat(String pattern)
使用给定模式 SimpleDateFormat并使用默认的 FORMAT语言环境的默认日期格式符号。
SimpleDateFormat(String pattern, DateFormatSymbols formatSymbols)
使用给定的模式和日期格式符号构造一个 SimpleDateFormat
SimpleDateFormat(String pattern, Locale locale)
构造一个 SimpleDateFormat使用给定的模式和给定的区域设置的默认日期格式符号。
代码演示:
//创建日期格式化对象,在获取格式化对象时可以指定风格
DateFormat df= new SimpleDateFormat("yyyy-MM-dd");//对日期进行格式化
Date date = new Date(1607616000000L);
String str_time = df.format(date);
System.out.println(str_time);//2020年12月11日

日期和时间模式

日期和时间格式由日期和时间模式字符串指定。 在日期和时间模式字符串中,从'A''Z'和从'a''z'的非引号的字母被解释为表示日期或时间字符串的组件的模式字母。 可以使用单引号( ' )引用文本,以避免解释。 "''"代表单引号。 所有其他字符不被解释; 在格式化过程中,它们只是复制到输出字符串中,或者在解析过程中与输入字符串匹配。

定义了以下图案字母(所有其他字符从'A''Z'和从'a''z'被保留):

Letter Date or Time Component Presentation Examples
G Era designator Text AD
y Year Year 1996; 96
Y Week year Year 2009; 09
M Month in year (context sensitive) Month July; Jul; 07
L Month in year (standalone form) Month July; Jul; 07
w Week in year Number 27
W Week in month Number 2
D Day in year Number 189
d Day in month Number 10
F Day of week in month Number 2
E Day name in week Text Tuesday; Tue
u Day number of week (1 = Monday, ..., 7 = Sunday) Number 1
a Am/pm marker Text PM
H Hour in day (0-23) Number 0
k Hour in day (1-24) Number 24
K Hour in am/pm (0-11) Number 0
h Hour in am/pm (1-12) Number 12
m Minute in hour Number 30
s Second in minute Number 55
S Millisecond Number 978
z Time zone General time zone Pacific Standard Time; PST; GMT-08:00
Z Time zone RFC 822 time zone -0800
X Time zone ISO 8601 time zone -08; -0800; -08:00

模式字母通常重复,因为它们的数字确定了准确的表示:

  • Text:对于格式化,如果模式字母的数量是4以上,则使用完整的形式; 否则,如果有的话,使用简短或缩写形式。 对于解析,两种形式都是接受的,与模式字母的数量无关。

  • Number:对于格式化,模式字母的数量是最小位数,而较短的数字将零填充到此数量。 对于解析,模式字母的数量将被忽略,除非需要分隔两个相邻的字段。

  • Year:如果格式化程序的Calendar是公历,则应用以下规则。
    • 对于格式化,如果模式字母数为2,那么年份将被截断为2位数; 否则被解释为number 。
    • 对于解析,如果模式字母的数量大于2,则年份将按字面解释,而不管数字的数量。 所以使用“MM / dd / yyyy”模式,“01/11/12”解析到公元12年1月11日
    • 为了使用缩写年份模式(“y”或“yy”)进行解析, SimpleDateFormat必须解释相对于某个世纪的缩写年份。 它是通过将日期调整为在创建SimpleDateFormat实例之后的80年之前和20年之后进行的。 例如,使用1997年1月1日创建的“MM / dd / yy”模式和SimpleDateFormat实例,字符串“01/11/12”将被解释为2012年1月11日,而字符串“05/04 / 64“将被解释为1964年5月4日。在解析期间,只有由Character.isDigit(char)定义的两个数字组成的字符串将被解析为默认世纪。 任何其他数字字符串,例如一位数字字符串,三位或三位以上数字字符串,或两位数字字符串(不全部为数字)(例如“-1”),均按字面解释。 所以“01/02/3”或“01/02/003”的解析方式与公元3年1月2日相同。 同样,“01/02 / -3”在公元前4年1月2日被解析。
    否则,将应用日历系统特定的表单。 对于格式化和解析两者,如果模式字母数为4以上,则使用特定日历long form 。 否则,使用一个特定日历short or abbreviated form 。

    如果周年'Y'被指定,并且calendar不支持任何week years ,则使用日历年( 'y' )。 可以通过致电getCalendar()测试周年的支持。 isWeekDateSupported()

  • Month:如果模式字母数为3以上,则该月份被解释为text ; 否则,它被解释为number 。
    • 字母M产生上下文相关的月份名称,例如嵌入的名称形式。 如果DateFormatSymbols已经与构造明确设置SimpleDateFormat(String, DateFormatSymbols)或方法setDateFormatSymbols(DateFormatSymbols) ,由给定月份名称DateFormatSymbols被使用。
    • L字母生成独立形式的月份名称。

format()方法

将Date对象转换成String

Date date = new Date(1607616000000L);//Fri Dec 11 00:00:00 CST 2020
DateFormat df = new SimpleDateFormat(“yyyy年MM月dd日”);
String str = df.format(date);
//str中的内容为2020年12月11日

parse()方法

将String转换成Date(转换时,该String要符合指定格式,否则不能转换)

String str = ”2020年12月11日”;
DateFormat df = new SimpleDateFormat(“yyyy年MM月dd日”);
Date date = df.parse( str );
//Date对象中的内容为Fri Dec 11 00:00:00 CST 2020

Calendar类

Calendar是日历类,在Date后出现,替换掉了许多Date的方法。该类将所有可能用到的时间信息封装为静态成员变量,方便获取。

西方星期的开始为周日,中国为周一。

在Calendar类中,月份的表示是以0-11代表1-12月。

日期是有大小关系的,时间靠后,时间越大。

Modifier and Type Method and Description
abstract void add(int field, int amount)
根据日历的规则,将指定的时间量添加或减去给定的日历字段。
boolean after(Object when)
返回 Calendar是否 Calendar指定时间之后的时间 Object
boolean before(Object when)
返回此 Calendar是否 Calendar指定的时间之前指定的时间 Object
void clear()
将所有的日历字段值和时间值(毫秒从偏移 Epoch如此) Calendar不确定。
void clear(int field)
设置给定日历字段值和时间值(毫秒从偏移 Epoch如此) Calendar不确定。
Object clone()
创建并返回此对象的副本。
int compareTo(Calendar anotherCalendar)
比较时间值(从毫秒偏移量 Epoch由两个表示) Calendar对象。
protected void complete()
填写日历字段中的任何未设置的字段。
protected abstract void computeFields()
当前毫秒时间值转换为 time的日历字段值 fields[]
protected abstract void computeTime()
fields[]中的当前日历字段值 转换为毫秒时间值 time
boolean equals(Object obj)
将此 Calendar与指定的Object进行 Object
int get(int field)
返回给定日历字段的值。
int getActualMaximum(int field)
给定此 Calendar的时间值,返回指定日历字段可能具有的 Calendar
int getActualMinimum(int field)
给定此 Calendar的时间值,返回指定的日历字段可以具有的 Calendar
static Set getAvailableCalendarTypes()
返回一个不可 SetCalendar ,其中包含运行时环境中 Set支持的所有日历类型。
static Locale[] getAvailableLocales()
返回一个所有区域设置的数组,该类的 getInstance方法可以返回本地化实例。
String getCalendarType()
返回此 Calendar的日历类型。
String getDisplayName(int field, int style, Locale locale)
返回给定的 stylelocale中的日历 field的字符串表示 locale
Map getDisplayNames(int field, int style, Locale locale)
返回 Map包含日历的所有名称 field在给定 stylelocale及其相应的字段值。
int getFirstDayOfWeek()
得到一周的第一天是什么 例如, SUNDAY在美国, MONDAY在法国。
abstract int getGreatestMinimum(int field)
返回此 Calendar实例的给定日历字段的最高最小值。
static Calendar getInstance()
使用默认时区和区域设置获取日历。
static Calendar getInstance(Locale aLocale)
使用默认时区和指定的区域设置获取日历。
static Calendar getInstance(TimeZone zone)
使用指定的时区和默认语言环境获取日历。
static Calendar getInstance(TimeZone zone, Locale aLocale)
获取具有指定时区和区域设置的日历。
abstract int getLeastMaximum(int field)
返回此 Calendar实例的给定日历字段的最低最大值。
abstract int getMaximum(int field)
返回此 Calendar实例的给定日历字段的 Calendar
int getMinimalDaysInFirstWeek()
获得一年中第一周所需的最低限度的日子; 例如,如果第一周被定义为包含一年中的第一个月的第一个星期,则此方法返回1。
abstract int getMinimum(int field)
返回此 Calendar实例的给定日历字段的 Calendar
Date getTime()
返回一个 Date表示此物体 Calendar的时间值(毫秒从偏移 Epoch “)。
long getTimeInMillis()
以毫秒为单位返回此日历的时间值。
TimeZone getTimeZone()
获取时区。
int getWeeksInWeekYear()
返回由这个 Calendar表示的星期内的星期 Calendar
int getWeekYear()
返回这个 Calendar
int hashCode()
返回此日历的哈希码。
protected int internalGet(int field)
返回给定日历字段的值。
boolean isLenient()
告诉日期/时间的解释是否宽松。
boolean isSet(int field)
确定给定的日历字段是否具有值集,包括由 get方法调用触发的内部字段计算设置的值。
boolean isWeekDateSupported()
返回此 Calendar是否支持周日期。
abstract void roll(int field, boolean up)
在给定时间字段上添加或减少单个时间单位,而不改变较大的字段。
void roll(int field, int amount)
将指定(签名)金额添加到指定的日历字段,而不更改较大的字段。
void set(int field, int value)
将给定的日历字段设置为给定的值。
void set(int year, int month, int date)
设置日历字段中的值 YEARMONTHDAY_OF_MONTH
void set(int year, int month, int date, int hourOfDay, int minute)
设置日历字段中的值 YEARMONTHDAY_OF_MONTHHOUR_OF_DAYMINUTE
void set(int year, int month, int date, int hourOfDay, int minute, int second)
设置字段中的值 YEARMONTHDAY_OF_MONTHHOUR_OF_DAYMINUTESECOND
void setFirstDayOfWeek(int value)
设置一周的第一天是什么? 例如, SUNDAY在美国, MONDAY在法国。
void setLenient(boolean lenient)
指定日期/时间解释是否宽松。
void setMinimalDaysInFirstWeek(int value)
设定一年中第一个星期所需的最短时间是多少? 例如,如果第一周被定义为包含一年中第一个月的第一天的第一周,请调用此值为1的方法。
void setTime(Date date)
使用给定的 Date设置此日历的时间。
void setTimeInMillis(long millis)
从给定的长值设置此日历的当前时间。
void setTimeZone(TimeZone value)
以给定的时区值设置时区。
void setWeekDate(int weekYear, int weekOfYear, int dayOfWeek)
设置这个 Calendar的日期与给定的日期说明符 - 周年,年周和星期几。
Instant toInstant()
将此对象转换为Instant
String toString()
返回此日历的字符串表示形式。

常用字段值

  • YEAR 年
  • MONTH 月,从0开始算起,最大11;0代表1月,11代表12月。
  • DATE 天
  • HOUR 时
  • MINUTE分
  • SECOND秒

getInstance()方法

需要注意的是Calendar为抽象类,由于语言敏感性,Calendar类在创建对象时并非直接创建,而是通过静态方法创建,将语言敏感内容处理好,再返回子类对象

Calendar c = Calendar.getInstance();  //返回当前时间

get()方法

获取时间

Calendar c = Calendar.getInstance();
int year = c.get(Calendar.YEAR);

add()方法

指定字段增加某值

Calendar c = Calendar.getInstance();
//修改当前时间为3天后
c.add(Calendar.DATE, 3);
//修改当前时间为5小时后
c.add(Calendar.HOUR, 5);

set()方法

设置指定字段的值

Calendar c = Calendar.getInstance();
//设置时间为2020年5月20日
c.set(Calendar.YEAR, 2020);
c.set(Calendar.MONTH, 4);
c.set(Calendar.DATE, 20);

getTime()方法 Calendar类

获取该日历对象转成的日期对象

Calendar c = Calendar.getInstance();
Date d = c.getTime();