java之进阶语法(Object类及日期时间类)
一、关于Object类
(一)概述
- java.lang.object类是java语言的根类,即是所有类的父类。
- 若一个类没有指定父类,那么默认继承自Object类
- object类常用的方法有以下:
- public String toString()返回该对象的字符串表示。通常,toString 方法会返回一个“以文本方式表示”此对象的字符串。结果应是一个简明但易于读懂的信息表达式。建议所有子类都重写此方法。直接打印对象的名字,调用的其实就是toString方法。toString方法返回什么,就打印什么。如果不重写,那么默认toString方法输出的是对象的地址值。所以看一个类是否重写了toString方法,直接打印这个类对应对象的名字即可。- public boolean equals(Object obj)指示其他某个对象是否与此对象“相等”。equals 方法在非空对象引用上实现相等关系:* 自反性:对于任何非空引用值 x,x.equals(x) 都应返回 true。* 对称性:对于任何非空引用值 x 和 y,当且仅当 y.equals(x) 返回 true 时,x.equals(y) 才应返回 true。* 传递性:对于任何非空引用值 x、y 和 z,如果 x.equals(y) 返回 true,并且 y.equals(z) 返回 true,那么 x.equals(z) 应返回 true。* 一致性:对于任何非空引用值 x 和 y,多次调用 x.equals(y) 始终返回 true 或始终返回 false,前提是对象上 equals 比较中所用的信息没有被修改。* 对于任何非空引用值 x,x.equals(null) 都应返回 false。Object 类的 equals 方法实现对象上差别可能性最大的相等关系;即,对于任何非空引用值 x 和 y,当且仅当 x 和 y 引用同一个对象时,此方法才返回 true(x == y 具有值 true)。注意:当此方法被重写时,通常有必要重写 hashCode 方法,以维护 hashCode 方法的常规协定,该协定声明相等对象必须具有相等的哈希码。Object类的equals源码如下:public boolean equals(Object obj){return (this == obj)}即默认的Object类的equals方法比较的是两个对象的地址值,没有意义,所以我们需要重写equals方法,用来比较两个对象的属性。equals方法中隐含了一个多态,即equals方法的形参是Object类型,而我们传入的实参往往是我们自己new出来的对象,所以这里存在了一个父类引用指向子类对象,即多态的问题。多态问题存在一个弊端,就是父类引用指向子类对象后,无法调用子类特有的方法,所以在重写equals方法前,要将传入的实参进行向下转型。代码如下:public boolean equals(Object obj){Person p = (Person) obj;// 其他比较代码... ...}
(二)Object类的方法
protected Object
|
clone() 创建并返回此对象的一个副本。 |
boolean
|
equals(Object obj) 指示其他某个对象是否与此对象“相等”。 |
protected void
|
finalize() 当垃圾回收器确定不存在对该对象的更多引用时,由对象的垃圾回收器调用此方法。 |
Class<?>
|
getClass() 返回此 Object 的运行时类。
|
int
|
hashCode() 返回该对象的哈希码值。 |
void
|
notify() 唤醒在此对象监视器上等待的单个线程。 |
void
|
notifyAll() 唤醒在此对象监视器上等待的所有线程。 |
String
|
toString() 返回该对象的字符串表示。 |
void
|
wait() 在其他线程调用此对象的 notify() 方法或 notifyAll() 方法前,导致当前线程等待。
|
void
|
wait(long timeout) 在其他线程调用此对象的 notify() 方法或 notifyAll() 方法,或者超过指定的时间量前,导致当前线程等待。
|
void
|
wait(long timeout, int nanos) 在其他线程调用此对象的 notify() 方法或 notifyAll() 方法,或者其他某个线程中断当前线程,或者已超过某个实际时间量前,导致当前线程等待。
|
二、Objects类
- Objects类是从java7开始有的一个工具类,具体为:java.util.Objects。
- 这个类中包含了很多静态方法,用来操作具体对象。比如在Objects类中也有equals方法。
- 这些方法是空指针安全的或者说是容忍空指针的。
- Objects类中也有equals方法具体如下:
- public static boolean equals(Object a, Object b)具体源码如下:public static boolean equals(Object a, Object b){return (a == b) || (a!=null && a.equals(b));}
三、日期时间类
(一)Date类
1.简介
java.util.Date类表示特定的时间,即一刹那的时间,精确到毫秒。
在 JDK 1.1 之前,类 Date
有两个其他的函数。它允许把日期解释为年、月、日、小时、分钟和秒值。它也允许格式化和解析日期字符串。不过,这些函数的 API 不易于实现国际化。从 JDK 1.1 开始,应该使用 Calendar
类实现日期和时间字段之间转换,使用 DateFormat
类来格式化和解析日期字符串。Date
中的相应方法已废弃。
尽管 Date
类打算反映协调世界时 (UTC),但无法做到如此准确,这取决于 Java 虚拟机的主机环境。当前几乎所有操作系统都假定 1 天 = 24 × 60 × 60 = 86400 秒。但对于 UTC,大约每一两年出现一次额外的一秒,称为“闰秒”。闰秒始终作为当天的最后一秒增加,并且始终在 12 月 31 日或 6 月 30 日增加。例如,1995 年的最后一分钟是 61 秒,因为增加了闰秒。大多数计算机时钟不是特别的准确,因此不能反映闰秒的差别。
一些计算机标准是按照格林威治标准时 (GMT) 定义的,格林威治标准时和世界时 (UT) 是相等的。GMT 是标准的“民间”名称;UT 是相同标准的“科学”名称。UTC 和 UT 的区别是:UTC 是基于原子时钟的,UT 是基于天体观察的,两者在实际应用中难分轩轾。因为地球的旋转不是均匀的(它以复杂的方式减速和加速),所以 UT 始终不是均匀地流过。闰秒是根据需要引入 UTC 的,以便把 UTC 保持在 UT1 的 0.9 秒之内,UT1 是应用了某些更正的 UT 版本。还有其他的时间和日期系统;例如,基于卫星的全球定位系统 (GPS) 使用的时间刻度与 UTC 同步,但没有 针对闰秒进行调整。
可以把日期转换为毫秒:即以1970年1月1日00:00:00为时间原点,计算当前时间距时间原点经历了多少毫秒。System.currentTimeMillis();函数即是后去当前系统时间距时间原点经历了多少毫秒。
时间原点代表的是英国格林威治标准时,在中国要+8小时,即1970年1月1日08:00:00为中国的时间原点。
在类 Date
所有可以接受或返回年、月、日期、小时、分钟和秒值的方法中,将使用下面的表示形式:
- 年份 y 由整数 y
- 1900
表示。 - 月份由从 0 至 11 的整数表示;0 是一月、1 是二月等等;因此 11 是十二月。
- 日期(一月中的某天)按通常方式由整数 1 至 31 表示。
- 小时由从 0 至 23 的整数表示。因此,从午夜到 1 a.m. 的时间是 0 点,从中午到 1 p.m. 的时间是 12 点。
- 分钟按通常方式由 0 至 59 的整数表示。
- 秒由 0 至 61 的整数表示;值 60 和 61 只对闰秒发生,尽管那样,也只用在实际正确跟踪闰秒的 Java 实现中。于按当前引入闰秒的方式,两个闰秒在同一分钟内发生是极不可能的,但此规范遵循 ISO C 的日期和时间约定。
在所有情形中,针对这些目的赋予方法的参数不需要在指定的范围内;例如,可以把日期指定为 1 月 32 日,并把它解释为 2 月 1 日的相同含义。
2.构造方法摘要
Date() 分配 Date 对象并初始化此对象,以表示分配它的时间(精确到毫秒),直接打印后获取的是系统同当前时间。
|
Date(int year, int month, int date) 已过时。 从 JDK 1.1 开始,由 Calendar.set(year + 1900, month, date) 或 GregorianCalendar(year + 1900, month, date) 取代。
|
Date(int year, int month, int date, int hrs, int min) 已过时。 从 JDK 1.1 开始,由 Calendar.set(year + 1900, month, date, hrs, min) 或 GregorianCalendar(year + 1900, month, date, hrs, min) 取代。
|
Date(int year, int month, int date, int hrs, int min, int sec) 已过时。 从 JDK 1.1 开始,由 Calendar.set(year + 1900, month, date, hrs, min, sec) 或 GregorianCalendar(year + 1900, month, date, hrs, min, sec) 取代。
|
Date(long date) 分配 Date 对象并初始化此对象,以表示自从标准基准时间(称为“历元(epoch)”,即 1970 年 1 月 1 日 00:00:00 GMT)以来的指定毫秒数,毫秒转化为date日期。
|
Date(String s) 已过时。 从 JDK 1.1 开始,由 DateFormat.parse(String s) 取代。
|
从上可以看出6个构造方法有4个都已经过时。
(三)方法摘要
boolean
|
after(Date when) 测试此日期是否在指定日期之后。 |
boolean
|
before(Date when) 测试此日期是否在指定日期之前。 |
Object
|
clone() 返回此对象的副本。 |
int
|
compareTo(Date anotherDate) 比较两个日期的顺序。 |
boolean
|
equals(Object obj) 比较两个日期的相等性。 |
int
|
getDate() 已过时。 从 JDK 1.1 开始,由 Calendar.get(Calendar.DAY_OF_MONTH) 取代。
|
int
|
getDay() 已过时。 从 JDK 1.1 开始,由 Calendar.get(Calendar.DAY_OF_WEEK) 取代。
|
int
|
getHours() 已过时。 从 JDK 1.1 开始,由 Calendar.get(Calendar.HOUR_OF_DAY) 取代。
|
int
|
getMinutes() 已过时。 从 JDK 1.1 开始,由 Calendar.get(Calendar.MINUTE) 取代。
|
int
|
getMonth() 已过时。 从 JDK 1.1 开始,由 Calendar.get(Calendar.MONTH) 取代。
|
int
|
getSeconds() 已过时。 从 JDK 1.1 开始,由 Calendar.get(Calendar.SECOND) 取代。
|
long
|
getTime() 返回自 1970 年 1 月 1 日 00:00:00 GMT 以来此 Date 对象表示的毫秒数,日期转换为毫秒值。 |
int
|
getTimezoneOffset() 已过时。 从 JDK 1.1 开始,由 -(Calendar.get(Calendar.ZONE_OFFSET) + Calendar.get(Calendar.DST_OFFSET)) / (60 * 1000) 取代。
|
int
|
getYear() 已过时。 从 JDK 1.1 开始,由 Calendar.get(Calendar.YEAR) - 1900 取代。
|
int
|
hashCode() 返回此对象的哈希码值。 |
static long
|
parse(String s) 已过时。 从 JDK 1.1 开始,由 DateFormat.parse(String s) 取代。
|
void
|
setDate(int date) 已过时。 从 JDK 1.1 开始,由 Calendar.set(Calendar.DAY_OF_MONTH, int date) 取代。
|
void
|
setHours(int hours) 已过时。 从 JDK 1.1 开始,由 Calendar.set(Calendar.HOUR_OF_DAY, int hours) 取代。
|
void
|
setMinutes(int minutes) 已过时。 从 JDK 1.1 开始,由 Calendar.set(Calendar.MINUTE, int minutes) 取代。
|
void
|
setMonth(int month) 已过时。 从 JDK 1.1 开始,由 Calendar.set(Calendar.MONTH, int month) 取代。
|
void
|
setSeconds(int seconds) 已过时。 从 JDK 1.1 开始,由 Calendar.set(Calendar.SECOND, int seconds) 取代。
|
void
|
setTime(long time) 设置此 Date 对象,以表示 1970 年 1 月 1 日 00:00:00 GMT 以后 time 毫秒的时间点。
|
void
|
setYear(int year) 已过时。 从 JDK 1.1 开始,由 Calendar.set(Calendar.YEAR, year + 1900) 取代。
|
String
|
toGMTString() 已过时。 从 JDK 1.1 开始,由 DateFormat.format(Date date) 取代,使用 GMT TimeZone 。
|
String
|
toLocaleString() 已过时。 从 JDK 1.1 开始,由 DateFormat.format(Date date) 取代。
|
String
|
toString() 把此 Date 对象转换为以下形式的 String : dow mon dd hh:mm:ss zzz yyyy 其中: dow 是一周中的某一天 (Sun, Mon, Tue, Wed, Thu, Fri, Sat)。
|
static long
|
UTC(int year, int month, int date, int hrs, int min, int sec) 已过时。 从 JDK 1.1 开始,由 Calendar.set(year + 1900, month, date, hrs, min, sec) 或 GregorianCalendar(year + 1900, month, date, hrs, min, sec) 取代,使用 UTC TimeZone ,后跟 Calendar.getTime().getTime() 。
|
(二)DateFormat类(是一个抽象类)
1.概述
DateFormat 是日期/时间格式化子类的抽象类,它以与语言无关的方式格式化并解析日期或时间。日期/时间格式化子类(如 SimpleDateFormat)允许进行格式化(也就是日期 -> 文本)、解析(文本-> 日期)和标准化。将日期表示为 Date
对象,或者表示为从 GMT(格林尼治标准时间)1970 年 1 月 1 日 00:00:00 这一刻开始的毫秒数。
DateFormat 提供了很多类方法,以获得基于默认或给定语言环境和多种格式化风格的默认日期/时间 Formatter。格式化风格包括 FULL、LONG、MEDIUM 和 SHORT。方法描述中提供了使用这些风格的更多细节和示例。
DateFormat 可帮助进行格式化并解析任何语言环境的日期。对于月、星期,甚至日历格式(阴历和阳历),其代码可完全与语言环境的约定无关。
要格式化一个当前语言环境下的日期,可使用某个静态工厂方法:
myString = DateFormat.getDateInstance().format(myDate);
如果格式化多个日期,那么获取该格式并多次使用它是更为高效的做法,这样系统就不必多次获取有关环境语言和国家/地区约定的信息了。
DateFormat df = DateFormat.getDateInstance();for (int i = 0; i < myDate.length; ++i) {output.println(df.format(myDate[i]) + "; ");}
要格式化不同语言环境的日期,可在 getDateInstance() 的调用中指定它。
DateFormat df = DateFormat.getDateInstance(DateFormat.LONG, Locale.FRANCE);
还可使用 DateFormat 进行解析。
myDate = df.parse(myString);
使用 getDateInstance 来获取该国家/地区的标准日期格式。另外还提供了一些其他静态工厂方法。使用 getTimeInstance 可获取该国家/地区的时间格式。使用 getDateTimeInstance 可获取日期和时间格式。可以将不同选项传入这些工厂方法,以控制结果的长度(从 SHORT 到 MEDIUM 到 LONG 再到 FULL)。确切的结果取决于语言环境,但是通常:
- SHORT 完全为数字,如 12.13.52 或 3:30pm
- MEDIUM 较长,如 Jan 12, 1952
- LONG 更长,如 January 12, 1952 或 3:30:32pm
- FULL 是完全指定,如 Tuesday、April 12、1952 AD 或 3:30:42pm PST。
如果愿意,还可以在格式上设置时区。如果想对格式化或解析施加更多的控制(或者给予用户更多的控制),可以尝试将从工厂方法所获取的 DateFormat 强制转换为 SimpleDateFormat。这适用于大多数国家/地区;只是要记住将其放入一个 try 代码块中,以防遇到特殊的格式。
还可以使用借助 ParsePosition 和 FieldPosition 的解析和格式化方法形式来
- 逐步地解析字符串的各部分。
- 对齐任意特定的字段,或者找出字符串在屏幕上的选择位置。
同步
日期格式不是同步的。建议为每个线程创建独立的格式实例。如果多个线程同时访问一个格式,则它必须保持外部同步。
DateFormat是一个抽象类,无法直接使用,可以使用DateFormat的子类,即使用SimpleDateFormat类。
2.字段摘要
static int
|
AM_PM_FIELD 用于对齐 AM_PM 字段的有用常量。 |
protected Calendar
|
calendar DateFormat 使用 calendar 来生成实现日期和时间格式化所需的时间字段值。
|
static int
|
DATE_FIELD 用于对齐 DATE 字段的有用常量。 |
static int
|
DAY_OF_WEEK_FIELD 用于对齐 DAY_OF_WEEK 字段的有用常量。 |
static int
|
DAY_OF_WEEK_IN_MONTH_FIELD 用于对齐 DAY_OF_WEEK_IN_MONTH 字段的有用常量。 |
static int
|
DAY_OF_YEAR_FIELD 用于对齐 DAY_OF_YEAR 字段的有用常量。 |
static int
|
DEFAULT 用于默认模式的常量。 |
static int
|
ERA_FIELD 用于对齐 ERA 字段的有用常量。 |
static int
|
FULL 用于 FULL 模式的常量。 |
static int
|
HOUR_OF_DAY0_FIELD 用于对齐从 0 开始的 HOUR_OF_DAY 字段的有用常量。 |
static int
|
HOUR_OF_DAY1_FIELD 用于对齐从 1 开始的 HOUR_OF_DAY 字段的有用常量。 |
static int
|
HOUR0_FIELD 用于对齐从 0 开始的 HOUR 字段的有用常量。 |
static int
|
HOUR1_FIELD 用于对齐从 1 开始的 HOUR 字段的有用常量。 |
static int
|
LONG 用于 LONG 模式的常量。 |
static int
|
MEDIUM 用于 MEDIUM 模式的常量。 |
static int
|
MILLISECOND_FIELD 用于对齐 MILLISECOND 字段的有用常量。 |
static int
|
MINUTE_FIELD 用于对齐 MINUTE 字段的有用常量。 |
static int
|
MONTH_FIELD 用于对齐 MONTH 字段的有用常量。 |
protected NumberFormat
|
numberFormat 数字格式器, DateFormat 用其来格式化日期和时间中的数字。
|
static int
|
SECOND_FIELD 用于对齐 SECOND 字段的有用常量。 |
static int
|
SHORT 用于 SHORT 模式的常量。 |
static int
|
TIMEZONE_FIELD 用于对齐 TIMEZONE 字段的有用常量。 |
static int
|
WEEK_OF_MONTH_FIELD 用于对齐 WEEK_OF_MONTH 字段的有用常量。 |
static int
|
WEEK_OF_YEAR_FIELD 用于对齐 WEEK_OF_YEAR 字段的有用常量。 |
static int
|
YEAR_FIELD 用于对齐 YEAR 字段的有用常量。 |
3.方法摘要
Object
|
clone() 重写 Cloneable |
boolean
|
equals(Object obj) 重写 equals |
String
|
format(Date date) 将一个 Date 格式化为日期/时间字符串。 |
abstract StringBuffer
|
format(Date date, StringBuffer toAppendTo, FieldPosition fieldPosition) 将一个 Date 格式化为日期/时间字符串。 |
StringBuffer
|
format(Object obj, StringBuffer toAppendTo, FieldPosition fieldPosition) 重写 Format。 |
static Locale[]
|
getAvailableLocales() 返回所有语言环境的数组,此类的 get*Instance 方法可以为其返回已本地化的实例。
|
Calendar
|
getCalendar() 获取与此日期/时间格式器关联的日历。 |
static DateFormat
|
getDateInstance() 获取日期格式器,该格式器具有默认语言环境的默认格式化风格。 |
static DateFormat
|
getDateInstance(int style) 获取日期格式器,该格式器具有默认语言环境的给定格式化风格。 |
static DateFormat
|
getDateInstance(int style, Locale aLocale) 获取日期格式器,该格式器具有给定语言环境的给定格式化风格。 |
static DateFormat
|
getDateTimeInstance() 获取日期/时间格式器,该格式器具有默认语言环境的默认格式化风格。 |
static DateFormat
|
getDateTimeInstance(int dateStyle, int timeStyle) 获取日期/时间格式器,该格式器具有默认语言环境的给定日期和时间格式化风格。 |
static DateFormat
|
getDateTimeInstance(int dateStyle, int timeStyle, Locale aLocale) 获取日期/时间格式器,该格式器具有给定语言环境的给定格式化风格。 |
static DateFormat
|
getInstance() 获取为日期和时间使用 SHORT 风格的默认日期/时间格式器。 |
NumberFormat
|
getNumberFormat() 获取此日期/时间格式器用于格式化和解析时间的数字格式器。 |
static DateFormat
|
getTimeInstance() 获取时间格式器,该格式器具有默认语言环境的默认格式化风格。 |
static DateFormat
|
getTimeInstance(int style) 获取时间格式器,该格式器具有默认语言环境的给定格式化风格。 |
static DateFormat
|
getTimeInstance(int style, Locale aLocale) 获取时间格式器,该格式器具有给定语言环境的给定格式化风格。 |
TimeZone
|
getTimeZone() 获取时区。 |
int
|
hashCode() 重写 hashCode |
boolean
|
isLenient() 判断日期/时间解析是否为不严格的。 |
Date
|
parse(String source) 从给定字符串的开始解析文本,以生成一个日期。 |
abstract Date
|
parse(String source, ParsePosition pos) 根据给定的解析位置开始解析日期/时间字符串。 |
Object
|
parseObject(String source, ParsePosition pos) 解析字符串中的文本,以生成一个 Date 。
|
void
|
setCalendar(Calendar newCalendar) 设置此日期格式所使用的日历。 |
void
|
setLenient(boolean lenient) 指定日期/时间解析是否不严格。 |
void
|
setNumberFormat(NumberFormat newNumberFormat) 允许用户设置数字格式器。 |
void
|
setTimeZone(TimeZone zone) 为此 DateFormat 对象的日历设置时区。 |
private static void demo01() {// 使用format方法SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");Date date = new Date();String text = sdf.format(date);System.out.println(date);System.out.println(text);}private static void demo02() throws ParseException {// 使用parse方法,把符合构造方法中模式的字符串,解析为Date日期// parse 方法声名了一个异常叫parseException,原因是字符串和模式不一样,要么throws要么try catchSimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");Date date = sdf.parse("2021-03-01 23:18:03");System.out.println(date);}
4.SimpleDateFormat类
SimpleDateFormat
是一个以与语言环境有关的方式来格式化和解析日期的具体类。它允许进行格式化(日期 -> 文本)、解析(文本 -> 日期)和规范化。
SimpleDateFormat
使得可以选择任何用户定义的日期-时间格式的模式。但是,仍然建议通过 DateFormat
中的 getTimeInstance
、getDateInstance
或 getDateTimeInstance
来创建日期-时间格式器。每一个这样的类方法都能够返回一个以默认格式模式初始化的日期/时间格式器。可以根据需要使用 applyPattern
方法来修改格式模式。有关使用这些方法的更多信息,请参阅 DateFormat
。
日期和时间模式
日期和时间格式由日期和时间模式 字符串指定。在日期和时间模式字符串中,未加引号的字母 'A'
到 'Z'
和 'a'
到 'z'
被解释为模式字母,用来表示日期或时间字符串元素。文本可以使用单引号 ('
) 引起来,以免进行解释。"''"
表示单引号。所有其他字符均不解释;只是在格式化时将它们简单复制到输出字符串,或者在解析时与输入字符串进行匹配。
定义了以下模式字母(所有其他字符 'A'
到 'Z'
和 'a'
到 'z'
都被保留):
字母 日期或时间元素 表示 示例 G
Era 标志符 Text AD
y
年 Year 1996
;96
M
年中的月份 Month July
;Jul
;07
w
年中的周数 Number 27
W
月份中的周数 Number 2
D
年中的天数 Number 189
d
月份中的天数 Number 10
F
月份中的星期 Number 2
E
星期中的天数 Text Tuesday
;Tue
a
Am/pm 标记 Text PM
H
一天中的小时数(0-23) Number 0
k
一天中的小时数(1-24) Number 24
K
am/pm 中的小时数(0-11) Number 0
h
am/pm 中的小时数(1-12) Number 12
m
小时中的分钟数 Number 30
s
分钟中的秒数 Number 55
S
毫秒数 Number 978
z
时区 General time zone Pacific Standard Time
;PST
;GMT-08:00
Z
时区 RFC 822 time zone -0800
模式字母通常是重复的,其数量确定其精确表示:
- Text: 对于格式化来说,如果模式字母的数量大于等于 4,则使用完全形式;否则,在可用的情况下使用短形式或缩写形式。对于解析来说,两种形式都是可接受的,与模式字母的数量无关。
- Number: 对于格式化来说,模式字母的数量是最小的数位,如果数位不够,则用 0 填充以达到此数量。对于解析来说,模式字母的数量被忽略,除非必须分开两个相邻字段。
- Year: 如果格式器的
Calendar
是格里高利历,则应用以下规则。- 对于格式化来说,如果模式字母的数量为 2,则年份截取为 2 位数,否则将年份解释为 number。
- 对于解析来说,如果模式字母的数量大于 2,则年份照字面意义进行解释,而不管数位是多少。因此使用模式 "MM/dd/yyyy",将 "01/11/12" 解析为公元 12 年 1 月 11 日。
- 在解析缩写年份模式("y" 或 "yy")时,
SimpleDateFormat
必须相对于某个世纪来解释缩写的年份。这通过将日期调整为SimpleDateFormat
实例创建之前的 80 年和之后 20 年范围内来完成。例如,在 "MM/dd/yy" 模式下,如果SimpleDateFormat
实例是在 1997 年 1 月 1 日创建的,则字符串 "01/11/12" 将被解释为 2012 年 1 月 11 日,而字符串 "05/04/64" 将被解释为 1964 年 5 月 4 日。在解析时,只有恰好由两位数字组成的字符串(如Character.isDigit(char)
所定义的)被解析为默认的世纪。其他任何数字字符串将照字面意义进行解释,例如单数字字符串,3 个或更多数字组成的字符串,或者不都是数字的两位数字字符串(例如"-1")。因此,在相同的模式下, "01/02/3" 或 "01/02/003" 解释为公元 3 年 1 月 2 日。同样,"01/02/-3" 解析为公元前 4 年 1 月 2 日。
否则,则应用日历系统特定的形式。对于格式化和解析,如果模式字母的数量为 4 或大于 4,则使用日历特定的 long form。否则,则使用日历特定的 short or abbreviated form。
- Month: 如果模式字母的数量为 3 或大于 3,则将月份解释为 text;否则解释为 number。
- General time zone: 如果时区有名称,则将它们解释为 text。对于表示 GMT 偏移值的时区,使用以下语法:
GMTOffsetTimeZone:GMT Sign Hours : Minutes Sign: one of+ - Hours:DigitDigit Digit Minutes:Digit Digit Digit: one of0 1 2 3 4 5 6 7 8 9
- Hours 必须在 0 到 23 之间,Minutes 必须在 00 到 59 之间。格式是与语言环境无关的,并且数字必须取自 Unicode 标准的 Basic Latin 块。
对于解析来说,RFC 822 time zones 也是可接受的。
- RFC 822 time zone: 对于格式化来说,使用 RFC 822 4-digit 时区格式:
RFC822TimeZone:Sign TwoDigitHours MinutesTwoDigitHours:Digit Digit
TwoDigitHours 必须在 00 和 23 之间。其他定义请参阅 general time zones。
对于解析来说,general time zones 也是可接受的。
SimpleDateFormat
还支持本地化日期和时间模式 字符串。在这些字符串中,以上所述的模式字母可以用其他与语言环境有关的模式字母来替换。SimpleDateFormat
不处理除模式字母之外的文本本地化;而由类的客户端来处理。
示例
以下示例显示了如何在美国语言环境中解释日期和时间模式。给定的日期和时间为美国太平洋时区的本地时间 2001-07-04 12:08:56。
日期和时间模式 结果 "yyyy.MM.dd G 'at' HH:mm:ss z"
2001.07.04 AD at 12:08:56 PDT
"EEE, MMM d, ''yy"
Wed, Jul 4, '01
"h:mm a"
12:08 PM
"hh 'o''clock' a, zzzz"
12 o'clock PM, Pacific Daylight Time
"K:mm a, z"
0:08 PM, PDT
"yyyyy.MMMMM.dd GGG hh:mm aaa"
02001.July.04 AD 12:08 PM
"EEE, d MMM yyyy HH:mm:ss Z"
Wed, 4 Jul 2001 12:08:56 -0700
"yyMMddHHmmssZ"
010704120856-0700
"yyyy-MM-dd'T'HH:mm:ss.SSSZ"
2001-07-04T12:08:56.235-0700
同步
日期格式是不同步的。建议为每个线程创建独立的格式实例。如果多个线程同时访问一个格式,则它必须是外部同步的。
构造方法摘要 | |
---|---|
SimpleDateFormat() 用默认的模式和默认语言环境的日期格式符号构造 SimpleDateFormat 。
|
|
SimpleDateFormat(String pattern) 用给定的模式和默认语言环境的日期格式符号构造 SimpleDateFormat,pattern指模式,模式是区分大小写的,见上述,即y代表年份等,再如"yyyy.MM.dd G 'at' HH:mm:ss z" 代表 2001.07.04 AD at 12:08:56 PDT 。写对应的模式会替换为对应的时间或日期。模式中的字母是不能更改的,连接模式的符号是可以改变的
|
|
SimpleDateFormat(String pattern, DateFormatSymbols formatSymbols) 用给定的模式和日期符号构造 SimpleDateFormat 。
|
|
SimpleDateFormat(String pattern, Locale locale) 用给定的模式和给定语言环境的默认日期格式符号构造 SimpleDateFormat 。
|
(三)Calendar类
1.概述
Calendar
类是一个抽象类,它为特定瞬间与一组诸如 YEAR
、MONTH
、DAY_OF_MONTH
、HOUR
等 日历字段
之间的转换提供了一些方法,并为操作日历字段(例如获得下星期的日期)提供了一些方法。瞬间可用毫秒值来表示,它是距历元(即格林威治标准时间 1970 年 1 月 1 日的 00:00:00.000,格里高利历)的偏移量。
该类还为实现包范围外的具体日历系统提供了其他字段和方法。这些字段和方法被定义为 protected
。
与其他语言环境敏感类一样,Calendar
提供了一个类方法 getInstance
,以获得此类型的一个通用的对象。Calendar
的 getInstance
方法返回一个 Calendar
对象,其日历字段已由当前日期和时间初始化:
Calendar rightNow = Calendar.getInstance();
Calendar
对象能够生成为特定语言和日历风格实现日期-时间格式化所需的所有日历字段值,例如,日语-格里高里历,日语-传统日历。Calendar
定义了某些日历字段返回值的范围,以及这些值的含义。例如,对于所有日历,日历系统第一个月的值是 MONTH == JANUARY
。其他值是由具体子类(例如 ERA
)定义的。有关此内容的细节,请参阅每个字段的文档和子类文档。
获得并设置日历字段值
可以通过调用 set
方法来设置日历字段值。在需要计算时间值(距历元所经过的毫秒)或日历字段值之前,不会解释 Calendar
中的所有字段值设置。调用 get
、getTimeInMillis
、getTime
、add
和 roll
涉及此类计算。
宽松性
Calendar
有两种解释日历字段的模式,即 lenient 和 non-lenient。当 Calendar
处于 lenient 模式时,它可接受比它所生成的日历字段范围更大范围内的值。当 Calendar
重新计算日历字段值,以便由 get()
返回这些值时,所有日历字段都被标准化。例如,lenient 模式下的 GregorianCalendar
将 MONTH == JANUARY
、DAY_OF_MONTH == 32
解释为 February 1。
当 Calendar
处于 non-lenient 模式时,如果其日历字段中存在任何不一致性,它都会抛出一个异常。例如,GregorianCalendar
总是在 1 与月份的长度之间生成 DAY_OF_MONTH
值。如果已经设置了任何超出范围的字段值,那么在计算时间或日历字段值时,处于 non-lenient 模式下的 GregorianCalendar
会抛出一个异常。
第一个星期
Calendar
使用两个参数定义了特定于语言环境的 7 天制星期:星期的第一天和第一个星期中的最小一天(从 1 到 7)。这些数字取自构造 Calendar
时的语言环境资源数据。还可以通过为其设置值的方法来显式地指定它们。
在设置或获得 WEEK_OF_MONTH
或 WEEK_OF_YEAR
字段时,Calendar
必须确定一个月或一年的第一个星期,以此作为参考点。一个月或一年的第一个星期被确定为开始于 getFirstDayOfWeek()
的最早七天,它最少包含那一个月或一年的 getMinimalDaysInFirstWeek()
天数。第一个星期之前的各星期编号为 ...、-1、0;之后的星期编号为 2、3、...。注意,get()
返回的标准化编号方式可能有所不同。例如,特定 Calendar
子类可能将某一年第 1 个星期之前的那个星期指定为前一年的第 n
个星期。
日历字段解析
在计算日历字段中的日期和时间时,可能没有足够的信息用于计算(例如只有年和月,但没有日),或者可能有不一致的信息( 例如 "Tuesday, July 15, 1996"(格林威治时间)——实际上,1996 年 7 月 15 日是星期一 )。Calendar
将解析日历字段值,以便用以下方式确定日期和时间。
如果日历字段值中存在任何冲突,则 Calendar
将为最近设置的日历字段提供优先权。以下是日历字段的默认组合。将使用由最近设置的单个字段所确定的最近组合。
对于日期字段:
YEAR + MONTH + DAY_OF_MONTHYEAR + MONTH + WEEK_OF_MONTH + DAY_OF_WEEKYEAR + MONTH + DAY_OF_WEEK_IN_MONTH + DAY_OF_WEEKYEAR + DAY_OF_YEARYEAR + DAY_OF_WEEK + WEEK_OF_YEAR
对于时间字段:
HOUR_OF_DAYAM_PM + HOUR
如果在选定的字段组合中,还有尚未设置值的任一日历字段,那么 Calendar
将使用其默认值。每个字段的默认值可能依据具体的日历系统而有所不同。例如,在 GregorianCalendar
中,字段的默认值与历元起始部分的字段值相同:即 YEAR = 1970
、MONTH = JANUARY
、DAY_OF_MONTH = 1
,等等。
注: 对于某些特别时间的解释可能会有某些歧义,可以用下列方式解决:
- 23:59 是一天中的最后一分钟,而 00:00 是下一天的第一分钟。因此,1999 年 12 月 31 日的 23:59 < 2000 年 1 月 1 日的 00:00。
- 尽管从历史上看不够精确,但午夜也属于 "am",,中午属于 "pm",所以在同一天,12:00 am ( 午夜 ) < 12:01 am,12:00 pm ( 中午 ) < 12:01 pm。
日期或时间格式字符串不是日历定义的一部分,因为在运行时,用户必须能够修改或重写它们。可以使用 DateFormat
格式化日期。
字段操作
可以使用三种方法更改日历字段:set()
、add()
和 roll()
。
set(f, value)
将日历字段 f
更改为 value
。此外,它设置了一个内部成员变量,以指示日历字段 f
已经被更改。尽管日历字段 f
是立即更改的,但是直到下次调用 get()
、getTime()
、getTimeInMillis()
、add()
或 roll()
时才会重新计算日历的时间值(以毫秒为单位)。因此,多次调用 set()
不会触发多次不必要的计算。使用 set()
更改日历字段的结果是,其他日历字段也可能发生更改,这取决于日历字段、日历字段值和日历系统。此外,在重新计算日历字段之后,get(f)
没必要通过调用 set
方法返回 value
集合。具体细节是通过具体的日历类确定的。
示例:假定 GregorianCalendar
最初被设置为 1999 年 8 月 31 日。调用 set(Calendar.MONTH, Calendar.SEPTEMBER)
将该日期设置为 1999 年 9 月 31 日。如果随后调用 getTime()
,那么这是解析 1999 年 10 月 1 日的一个暂时内部表示。但是,在调用 getTime()
之前调用 set(Calendar.DAY_OF_MONTH, 30)
会将该日期设置为 1999 年 9 月 30 日,因为在调用 set()
之后没有发生重新计算。
add(f, delta)
将 delta
添加到 f
字段中。这等同于调用 set(f, get(f) + delta)
,但要带以下两个调整:
Add 规则 1。调用后
f
字段的值减去调用前f
字段的值等于delta
,以字段f
中发生的任何溢出为模。溢出发生在字段值超出其范围时,结果,下一个更大的字段会递增或递减,并将字段值调整回其范围内。Add 规则 2。如果期望某一个更小的字段是不变的,但让它等于以前的值是不可能的,因为在字段
f
发生更改之后,或者在出现其他约束之后,比如时区偏移量发生更改,它的最大值和最小值也在发生更改,然后它的值被调整为尽量接近于所期望的值。更小的字段表示一个更小的时间单元。HOUR
是一个比DAY_OF_MONTH
小的字段。对于不期望是不变字段的更小字段,无需进行任何调整。日历系统会确定期望不变的那些字段。
此外,与 set()
不同,add()
强迫日历系统立即重新计算日历的毫秒数和所有字段。
示例:假定 GregorianCalendar
最初被设置为 1999 年 8 月 31 日。调用 add(Calendar.MONTH, 13)
将日历设置为 2000 年 9 月 30 日。Add 规则 1 将 MONTH
字段设置为 September,因为向 August 添加 13 个月得出的就是下一年的 September。因为在 GregorianCalendar
中,DAY_OF_MONTH
不可能是 9 月 31 日,所以 add 规则 2 将 DAY_OF_MONTH
设置为 30,即最可能的值。尽管它是一个更小的字段,但不能根据规则 2 调整 DAY_OF_WEEK
,因为在 GregorianCalendar
中的月份发生变化时,该值也需要发生变化。
roll(f, delta)
将 delta
添加到 f
字段中,但不更改更大的字段。这等同于调用 add(f, delta)
,但要带以下调整:
Roll 规则。在完成调用后,更大的字段无变化。更大的字段表示一个更大的时间单元。
DAY_OF_MONTH
是一个比HOUR
大的字段。
示例:请参阅 GregorianCalendar.roll(int, int)
。
使用模型。为了帮助理解 add()
和 roll()
的行为,假定有一个用户界面组件,它带有用于月、日、年和底层 GregorianCalendar
的递增或递减按钮。如果从界面上读取的日期为 1999 年 1 月 31 日,并且用户按下月份的递增按钮,那么应该得到什么?如果底层实现使用 set()
,那么可以将该日期读为 1999 年 3 月 3 日。更好的结果是 1999 年 2 月 28 日。此外,如果用户再次按下月份的递增按钮,那么该日期应该读为 1999 年 3 月 31 日,而不是 1999 年 3 月 28 日。通过保存原始日期并使用 add()
或 roll()
,根据是否会影响更大的字段,用户界面可以像大多数用户所期望的那样运行。
2.字段摘要
static int
|
ALL_STYLES 指示所有风格名称的 getDisplayNames 的风格说明符,比如 "January" 和 "Jan"。
|
static int
|
AM 指示从午夜到中午之前这段时间的 AM_PM 字段值。
|
static int
|
AM_PM get 和 set 的字段数字,指示 HOUR 是在中午之前还是在中午之后。
|
static int
|
APRIL 指示在格里高利历和罗马儒略历中一年中第四个月的 MONTH 字段值。
|
protected boolean
|
areFieldsSet 如果 fields[] 与当前的设置时间同步,则返回 true。
|
static int
|
AUGUST 指示在格里高利历和罗马儒略历中一年中第八个月的 MONTH 字段值。
|
static int
|
DATE get 和 set 的字段数字,指示一个月中的某天。
|
static int
|
DAY_OF_MONTH get 和 set 的字段数字,指示一个月中的某天。
|
static int
|
DAY_OF_WEEK get 和 set 的字段数字,指示一个星期中的某天。
|
static int
|
DAY_OF_WEEK_IN_MONTH get 和 set 的字段数字,指示当前月中的第几个星期。
|
static int
|
DAY_OF_YEAR get 和 set 的字段数字,指示当前年中的天数。
|
static int
|
DECEMBER 指示在格里高利历和罗马儒略历中一年中第十二个月的 MONTH 字段值。
|
static int
|
DST_OFFSET get 和 set 的字段数字,以毫秒为单位指示夏令时的偏移量。
|
static int
|
ERA 指示年代的 get 和 set 的字段数字,比如罗马儒略历中的 AD 或 BC。
|
static int
|
FEBRUARY 指示在格里高利历和罗马儒略历中一年中第二个月的 MONTH 字段值。
|
static int
|
FIELD_COUNT get 和 set 可识别的不同字段的数量。
|
protected int[]
|
fields 此日历当前设置时间的日历字段值。 |
static int
|
FRIDAY 指示 Friday 的 DAY_OF_WEEK 字段值。
|
static int
|
HOUR get 和 set 的字段数字,指示上午或下午的小时。
|
static int
|
HOUR_OF_DAY get 和 set 的字段数字,指示一天中的小时。
|
protected boolean[]
|
isSet 通知是否设置了该日历某一指定日历字段的标志。 |
protected boolean
|
isTimeSet 如果 time 值是一个有效值,则返回 true。
|
static int
|
JANUARY 指示在格里高利历和罗马儒略历中一年中第一个月的 MONTH 字段值。
|
static int
|
JULY 指示在格里高利历和罗马儒略历中一年中第七个月的 MONTH 字段值。
|
static int
|
JUNE 指示在格里高利历和罗马儒略历中一年中第六个月的 MONTH 字段值。
|
static int
|
LONG 指示长名称的 getDisplayName 和 getDisplayNames 的风格说明符,比如 "January"。
|
static int
|
MARCH 指示在格里高利历和罗马儒略历中一年中第三个月的 MONTH 字段值。
|
static int
|
MAY 指示在格里高利历和罗马儒略历中一年中第五个月的 MONTH 字段值。
|
static int
|
MILLISECOND get 和 set 的字段数字,指示一秒中的毫秒。
|
static int
|
MINUTE get 和 set 的字段数字,指示一小时中的分钟。
|
static int
|
MONDAY 指示 Monday 的 DAY_OF_WEEK 字段值。
|
static int
|
MONTH 指示月份的 get 和 set 的字段数字。
|
static int
|
NOVEMBER 指示在格里高利历和罗马儒略历中一年中第十一个月的 MONTH 字段值。
|
static int
|
OCTOBER 指示在格里高利历和罗马儒略历中一年中第十个月的 MONTH 字段值。
|
static int
|
PM 指示从中午到午夜之前这段时间的 AM_PM 字段值。
|
static int
|
SATURDAY 指示 Saturday 的 DAY_OF_WEEK 字段值。
|
static int
|
SECOND get 和 set 的字段数字,指示一分钟中的秒。
|
static int
|
SEPTEMBER 指示在格里高利历和罗马儒略历中一年中第九个月的 MONTH 字段值。
|
static int
|
SHORT 指示短名称的 getDisplayName 和 getDisplayNames 的风格说明符,比如 "Jan"。
|
static int
|
SUNDAY 指示 Sunday 的 DAY_OF_WEEK 字段值。
|
static int
|
THURSDAY 指示 Thursday 的 DAY_OF_WEEK 字段值。
|
protected long
|
time 日历的当前设置时间,以毫秒为单位,表示自格林威治标准时间 1970 年 1月 1 日 0:00:00 后经过的时间。 |
static int
|
TUESDAY 指示 Tuesday 的 DAY_OF_WEEK 字段值。
|
static int
|
UNDECIMBER 指示一年中第十三个月的 MONTH 字段值。
|
static int
|
WEDNESDAY 指示 Wednesday 的 DAY_OF_WEEK 字段值。
|
static int
|
WEEK_OF_MONTH get 和 set 的字段数字,指示当前月中的星期数。
|
static int
|
WEEK_OF_YEAR get 和 set 的字段数字,指示当前年中的星期数。
|
static int
|
YEAR 指示年的 get 和 set 的字段数字。
|
static int
|
ZONE_OFFSET get 和 set 的字段数字,以毫秒为单位指示距 GMT 的大致偏移量。
|
3.构造方法摘要
protected
|
Calendar() 构造一个带有默认时区和语言环境的 Calendar。 |
protected
|
Calendar(TimeZone zone, Locale aLocale) 构造一个带有指定时区和语言环境的 Calendar。 |
4.方法摘要
abstract void
|
add(int field, int amount) 根据日历的规则,为给定的日历字段添加或减去指定的时间量。 |
boolean
|
after(Object when) 判断此 Calendar 表示的时间是否在指定 Object 表示的时间之后,返回判断结果。
|
boolean
|
before(Object when) 判断此 Calendar 表示的时间是否在指定 Object 表示的时间之前,返回判断结果。
|
void
|
clear() 将此 Calendar 的所日历字段值和时间值(从历元至现在的毫秒偏移量)设置成未定义。
|
void
|
clear(int field) 将此 Calendar 的给定日历字段值和时间值(从历元至现在的毫秒偏移量)设置成未定义。
|
Object
|
clone() 创建并返回此对象的一个副本。 |
int
|
compareTo(Calendar anotherCalendar) 比较两个 Calendar 对象表示的时间值(从历元至现在的毫秒偏移量)。
|
protected void
|
complete() 填充日历字段中所有未设置的字段。 |
protected abstract void
|
computeFields() 将当前毫秒时间值 time 转换为 fields[] 中的日历字段值。
|
protected abstract void
|
computeTime() 将 fields[] 中的当前日历字段值转换为毫秒时间值 time 。
|
boolean
|
equals(Object obj) 将此 Calendar 与指定 Object 比较。
|
int
|
get(int field) 返回给定日历字段的值。 |
int
|
getActualMaximum(int field) 给定此 Calendar 的时间值,返回指定日历字段可能拥有的最大值。
|
int
|
getActualMinimum(int field) 给定此 Calendar 的时间值,返回指定日历字段可能拥有的最小值。
|
static Locale[]
|
getAvailableLocales() 返回所有语言环境的数组,此类的 getInstance 方法可以为其返回本地化的实例。
|
String
|
getDisplayName(int field, int style, Locale locale) 返回给定 style 和 locale 下的日历 field 值的字符串表示形式。
|
Map<String,Integer>
|
getDisplayNames(int field, int style, Locale locale) 返回给定 style 和 locale 下包含日历 field 所有名称的 Map 及其相应字段值。
|
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 实例给定日历字段的最大值。
|
int
|
getMinimalDaysInFirstWeek() 获取一年中第一个星期所需的最少天数,例如,如果定义第一个星期包含一年第一个月的第一天,则此方法将返回 1。 |
abstract int
|
getMinimum(int field) 返回此 Calendar 实例给定日历字段的最小值。
|
Date
|
getTime() 返回一个表示此 Calendar 时间值(从历元至现在的毫秒偏移量)的 Date 对象。
|
long
|
getTimeInMillis() 返回此 Calendar 的时间值,以毫秒为单位。 |
TimeZone
|
getTimeZone() 获得时区。 |
int
|
hashCode() 返回该此日历的哈希码。 |
protected int
|
internalGet(int field) 返回给定日历字段的值。 |
boolean
|
isLenient() 判断日期/时间的解释是否为宽松的。 |
boolean
|
isSet(int field) 确定给定日历字段是否已经设置了一个值,其中包括因为调用 get 方法触发内部字段计算而导致已经设置该值的情况。
|
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 、MINUTE 和 SECOND 的值。
|
void
|
setFirstDayOfWeek(int value) 设置一星期的第一天是哪一天;例如,在美国,这一天是 SUNDAY ,而在法国,这一天是 MONDAY 。
|
void
|
setLenient(boolean lenient) 指定日期/时间解释是否是宽松的。 |
void
|
setMinimalDaysInFirstWeek(int value) 设置一年中第一个星期所需的最少天数,例如,如果定义第一个星期包含一年第一个月的第一天,则使用值 1 调用此方法。 |
void
|
setTime(Date date) 使用给定的 Date 设置此 Calendar 的时间。
|
void
|
setTimeInMillis(long millis) 用给定的 long 值设置此 Calendar 的当前时间值。 |
void
|
setTimeZone(TimeZone value) 使用给定的时区值来设置时区。 |
String
|
toString() 返回此日历的字符串表示形式。 |
5.示例
// 获得给定值
Calendar c = Calendar.getInstance();
int year = c.get(Calendar.YEAR);
int month = c.get(Calendar.MONTH);//西方的月份是0-11
int date = c.get(Calendar.DAYE);
int data2 = c.get(Calendar.DAY_OF_MONTH);// 设置 public void set(int field,int value)
c.set(Calendar.YEAR,9999);
c.set(2021,1,2);// add(int field,int amount);
// amount:正值增加,负值减少
c.add(Calendar.YEAR,2);// public Date getTime(); 返回一个表示此Calendar时间值(从历元到现在的毫秒偏移量)的Date对象
java之进阶语法(Object类及日期时间类)相关推荐
- 复习Object类_日期时间类_System类_StringBuilder_包装类以及各类的细节
Object类_日期时间类_System类_StringBuilder_包装类以及各类的细节 主要内容 Object类 Date类 DateFormat类 Calendar类 System类 Stri ...
- JAVA day13,14 API、Object类、日期时间类(long,Date,Calendar,DateFormat)、String类(字符串,可变长字符串)、正则表达式、包装类
1.API API(Application Programming Interface),应⽤程序编程接⼝.Java API是⼀本程序员的"字 典",是JDK提供给我们使⽤的类的说 ...
- (Java常用类)日期时间类
文章目录 Date类 概述 常用方法 代码演示 DateFormat类 构造方法 格式规则 常用方法 代码演示 Calendar类 概念 获取方式 常用方法 get/set方法 add方法 getTi ...
- Java基础知识(二)(Object类的常用方法、日期时间类、System类、StringBuilder类、包装类、Collection集合、Iterator迭代器、泛型、list集Set接口...)
文章目录 Java基础知识(二) 1.Object类的常用方法 1.1 toString方法 1.2 equals方法 1.3 Objects类 2.日期时间类 2.1 Date类 2.2 DateF ...
- java学习--基础知识进阶第五天--API、 Object类 System类、日期相关类、包装类正则表达式...
今日内容介绍 u Object类 & System类 u 日期相关类 u 包装类&正则表达式 第1章 Object类 & System类 1.1 Object类 1.1. ...
- JavaSE10:日期时间类、java比较器、System类、Math类、大数类
写在前面 常用类的学习结束了,现在就简单整理和通过一些小demo来巩固一下吧~ JDK8.0之前的日期时间类 1. java.lang.System类 System类提供的public static ...
- 6 日期字符串转日期_Java日期时间API系列6-----Jdk8中java.time包中的新的日期时间API类...
因为Jdk7及以前的日期时间类的不方便使用问题和线程安全问题等问题,2005年,Stephen Colebourne创建了Joda-Time库,作为替代的日期和时间API.Stephen向JCP提交了 ...
- java 日期时间工具_Java日期时间类工具
Java日期时间类工具 Java日期时间类 Date类 Java提供的Date类和Calendar类用于处理日期和时间的类,包括创建日期,时间对象,获取系统当前日期,时间 等操作.但Date类无法实现 ...
- 进阶 2 日期时间类
文章目录 Date DateFormat类 练习 Calendar类 日期时间类 Date java.util.Date`类 表示特定的瞬间,精确到毫秒. java.util.Date:表示日期和时间 ...
最新文章
- 用于精确导航和场景重建的 3D 配准方法(ICRA 2021)
- 5月30日,社区活动:SharePoint技术峰会
- 【C 语言】编译过程 分析 ( 预处理 | 编译 | 汇编 | 链接 | 宏定义 | 条件编译 | 编译器指示字 )
- java动效_Android 界面漩涡扭曲动效实现
- MySQL服务安全加固及防护
- java做图形界面计算n_n皇后问题回溯法---java图形界面实现回溯过程
- lua游戏脚本自动打怪_了解Lua(官方文档翻译)
- matlab高斯窗函数,Matlab中窗函数的简单使用
- 一个比较好看的彩带飘飞和点击效果 canvas实现
- 异速联应用交付解决方案的优势
- 16 台服务器达成 1000 万 tpmC,挑战分布式数据库性能极限
- ubuntu 恢复被删除的文件
- CSS-flex弹性布局补充
- 计算机起始时间1970
- 64位系统最大支持多少内存
- 警告 1 warning C4996: 'scanf': This function or variable may be unsafe. Consider using scanf_s instead
- Linux下C语言串口应用编程
- 速看!没有比这更全面的 Firebase 介绍!
- 经典 Fuzzer 工具 AFL 模糊测试指南
- Elasticsearch-Cat命令详解
热门文章
- python与统计学:正太分布(一)
- L1-039. 古风排版 团体程序设计天梯赛
- 适合rv1109+rv1126使用基于RKmedia的人脸和车牌识别的SDK及使用介绍说明
- 一看就懂!Springboot+Vue实现自己谷歌验证码生成器
- 主板芯片介绍---被AMD收购的Ati芯片组(五)
- div边框拖拽改变宽度
- 亚马逊运营的三大关联销售入口你都清楚吗?
- Win10下基于WSL的Ubuntu中使用ohmyzsh(精简版)
- 光伏逆变器资料GROWATT的 8-10KW 5-8KW光伏逆变器电路图
- IMX8M mini开发板资料分享