一、关于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 中的 getTimeInstancegetDateInstance 或 getDateTimeInstance 来创建日期-时间格式器。每一个这样的类方法都能够返回一个以默认格式模式初始化的日期/时间格式器。可以根据需要使用 applyPattern 方法来修改格式模式。有关使用这些方法的更多信息,请参阅 DateFormat

日期和时间模式

日期和时间格式由日期和时间模式 字符串指定。在日期和时间模式字符串中,未加引号的字母 'A' 到 'Z' 和 'a' 到 'z' 被解释为模式字母,用来表示日期或时间字符串元素。文本可以使用单引号 (') 引起来,以免进行解释。"''" 表示单引号。所有其他字符均不解释;只是在格式化时将它们简单复制到输出字符串,或者在解析时与输入字符串进行匹配。

定义了以下模式字母(所有其他字符 'A' 到 'Z' 和 'a' 到 'z' 都被保留):

字母 日期或时间元素 表示 示例
G Era 标志符 Text AD
y Year 199696
M 年中的月份 Month JulyJul07
w 年中的周数 Number 27
W 月份中的周数 Number 2
D 年中的天数 Number 189
d 月份中的天数 Number 10
F 月份中的星期 Number 2
E 星期中的天数 Text TuesdayTue
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 TimePSTGMT-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 类是一个抽象类,它为特定瞬间与一组诸如 YEARMONTHDAY_OF_MONTHHOUR 等 日历字段之间的转换提供了一些方法,并为操作日历字段(例如获得下星期的日期)提供了一些方法。瞬间可用毫秒值来表示,它是距历元(即格林威治标准时间 1970 年 1 月 1 日的 00:00:00.000,格里高利历)的偏移量。

该类还为实现包范围外的具体日历系统提供了其他字段和方法。这些字段和方法被定义为 protected

与其他语言环境敏感类一样,Calendar 提供了一个类方法 getInstance,以获得此类型的一个通用的对象。Calendar 的 getInstance 方法返回一个 Calendar 对象,其日历字段已由当前日期和时间初始化:

     Calendar rightNow = Calendar.getInstance();

Calendar 对象能够生成为特定语言和日历风格实现日期-时间格式化所需的所有日历字段值,例如,日语-格里高里历,日语-传统日历。Calendar 定义了某些日历字段返回值的范围,以及这些值的含义。例如,对于所有日历,日历系统第一个月的值是 MONTH == JANUARY。其他值是由具体子类(例如 ERA)定义的。有关此内容的细节,请参阅每个字段的文档和子类文档。

获得并设置日历字段值

可以通过调用 set 方法来设置日历字段值。在需要计算时间值(距历元所经过的毫秒)或日历字段值之前,不会解释 Calendar 中的所有字段值设置。调用 getgetTimeInMillisgetTimeadd 和 roll 涉及此类计算。

宽松性

Calendar 有两种解释日历字段的模式,即 lenient 和 non-lenient。当 Calendar 处于 lenient 模式时,它可接受比它所生成的日历字段范围更大范围内的值。当 Calendar 重新计算日历字段值,以便由 get() 返回这些值时,所有日历字段都被标准化。例如,lenient 模式下的 GregorianCalendar 将 MONTH == JANUARYDAY_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 = 1970MONTH = JANUARYDAY_OF_MONTH = 1,等等。

注: 对于某些特别时间的解释可能会有某些歧义,可以用下列方式解决:

  1. 23:59 是一天中的最后一分钟,而 00:00 是下一天的第一分钟。因此,1999 年 12 月 31 日的 23:59 < 2000 年 1 月 1 日的 00:00。
  2. 尽管从历史上看不够精确,但午夜也属于 "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) 
          设置日历字段 YEARMONTH 和 DAY_OF_MONTH 的值。
 void set(int year, int month, int date, int hourOfDay, int minute) 
          设置日历字段 YEARMONTHDAY_OF_MONTHHOUR_OF_DAY 和 MINUTE 的值。
 void set(int year, int month, int date, int hourOfDay, int minute, int second) 
          设置字段 YEARMONTHDAY_OF_MONTHHOURMINUTE 和 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类及日期时间类)相关推荐

  1. 复习Object类_日期时间类_System类_StringBuilder_包装类以及各类的细节

    Object类_日期时间类_System类_StringBuilder_包装类以及各类的细节 主要内容 Object类 Date类 DateFormat类 Calendar类 System类 Stri ...

  2. JAVA day13,14 API、Object类、日期时间类(long,Date,Calendar,DateFormat)、String类(字符串,可变长字符串)、正则表达式、包装类

    1.API API(Application Programming Interface),应⽤程序编程接⼝.Java API是⼀本程序员的"字 典",是JDK提供给我们使⽤的类的说 ...

  3. (Java常用类)日期时间类

    文章目录 Date类 概述 常用方法 代码演示 DateFormat类 构造方法 格式规则 常用方法 代码演示 Calendar类 概念 获取方式 常用方法 get/set方法 add方法 getTi ...

  4. 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 ...

  5. java学习--基础知识进阶第五天--API、 Object类 System类、日期相关类、包装类正则表达式...

    今日内容介绍 u  Object类 & System类 u  日期相关类 u  包装类&正则表达式 第1章 Object类 & System类 1.1 Object类 1.1. ...

  6. JavaSE10:日期时间类、java比较器、System类、Math类、大数类

    写在前面 常用类的学习结束了,现在就简单整理和通过一些小demo来巩固一下吧~ JDK8.0之前的日期时间类 1. java.lang.System类 System类提供的public static ...

  7. 6 日期字符串转日期_Java日期时间API系列6-----Jdk8中java.time包中的新的日期时间API类...

    因为Jdk7及以前的日期时间类的不方便使用问题和线程安全问题等问题,2005年,Stephen Colebourne创建了Joda-Time库,作为替代的日期和时间API.Stephen向JCP提交了 ...

  8. java 日期时间工具_Java日期时间类工具

    Java日期时间类工具 Java日期时间类 Date类 Java提供的Date类和Calendar类用于处理日期和时间的类,包括创建日期,时间对象,获取系统当前日期,时间 等操作.但Date类无法实现 ...

  9. 进阶 2 日期时间类

    文章目录 Date DateFormat类 练习 Calendar类 日期时间类 Date java.util.Date`类 表示特定的瞬间,精确到毫秒. java.util.Date:表示日期和时间 ...

最新文章

  1. 用于精确导航和场景重建的 3D 配准方法(ICRA 2021)
  2. 5月30日,社区活动:SharePoint技术峰会
  3. 【C 语言】编译过程 分析 ( 预处理 | 编译 | 汇编 | 链接 | 宏定义 | 条件编译 | 编译器指示字 )
  4. java动效_Android 界面漩涡扭曲动效实现
  5. MySQL服务安全加固及防护
  6. java做图形界面计算n_n皇后问题回溯法---java图形界面实现回溯过程
  7. lua游戏脚本自动打怪_了解Lua(官方文档翻译)
  8. matlab高斯窗函数,Matlab中窗函数的简单使用
  9. 一个比较好看的彩带飘飞和点击效果 canvas实现
  10. 异速联应用交付解决方案的优势
  11. 16 台服务器达成 1000 万 tpmC,挑战分布式数据库性能极限
  12. ubuntu 恢复被删除的文件
  13. CSS-flex弹性布局补充
  14. 计算机起始时间1970
  15. 64位系统最大支持多少内存
  16. 警告 1 warning C4996: 'scanf': This function or variable may be unsafe. Consider using scanf_s instead
  17. Linux下C语言串口应用编程
  18. 速看!没有比这更全面的 Firebase 介绍!
  19. 经典 Fuzzer 工具 AFL 模糊测试指南
  20. Elasticsearch-Cat命令详解

热门文章

  1. python与统计学:正太分布(一)
  2. L1-039. 古风排版 团体程序设计天梯赛
  3. 适合rv1109+rv1126使用基于RKmedia的人脸和车牌识别的SDK及使用介绍说明
  4. 一看就懂!Springboot+Vue实现自己谷歌验证码生成器
  5. 主板芯片介绍---被AMD收购的Ati芯片组(五)
  6. div边框拖拽改变宽度
  7. 亚马逊运营的三大关联销售入口你都清楚吗?
  8. Win10下基于WSL的Ubuntu中使用ohmyzsh(精简版)
  9. 光伏逆变器资料GROWATT的 8-10KW 5-8KW光伏逆变器电路图
  10. IMX8M mini开发板资料分享