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日被解析。
如果周年'Y'
被指定,并且calendar不支持任何week years ,则使用日历年('y'
)。 可以通过致电getCalendar()
测试周年的支持。isWeekDateSupported()
。 - Month:如果模式字母数为3以上,则该月份被解释为text ; 否则,它被解释为number 。
- 字母M产生上下文相关的月份名称,例如嵌入的名称形式。 如果
DateFormatSymbols
已经与构造明确设置SimpleDateFormat(String, DateFormatSymbols)
或方法setDateFormatSymbols(DateFormatSymbols)
,由给定月份名称DateFormatSymbols
被使用。 - L字母生成独立形式的月份名称。
- 字母M产生上下文相关的月份名称,例如嵌入的名称形式。 如果
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()
返回一个不可
Set 的
Calendar ,其中包含运行时环境中
Set 支持的所有日历类型。
|
static Locale[] |
getAvailableLocales()
返回一个所有区域设置的数组,该类的
getInstance 方法可以返回本地化实例。
|
String |
getCalendarType()
返回此
Calendar 的日历类型。
|
String |
getDisplayName(int field, int style, Locale locale)
返回给定的
style 和
locale 中的日历
field 的字符串表示
locale 。
|
Map |
getDisplayNames(int field, int style, Locale locale)
返回
Map 包含日历的所有名称
field 在给定
style 和
locale 及其相应的字段值。
|
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)
设置日历字段中的值
YEAR ,
MONTH 和
DAY_OF_MONTH 。
|
void |
set(int year, int month, int date, int hourOfDay, int minute)
设置日历字段中的值
YEAR ,
MONTH ,
DAY_OF_MONTH ,
HOUR_OF_DAY 和
MINUTE 。
|
void |
set(int year, int month, int date, int hourOfDay, int minute, int second)
设置字段中的值
YEAR ,
MONTH ,
DAY_OF_MONTH ,
HOUR_OF_DAY ,
MINUTE 和
SECOND 。
|
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();
0 条评论