日期与时间
Date
- Date类的对象在Java中代表的是当前所在系统的此刻日期时间。
- Date的构造器:
名称 | 说明 |
---|
public Date() | 创建一个Date对象,代表的是系统当前此刻日期时间。 |
public Date(long time) | 把时间毫秒值转换成Date日期对象。 |
名称 | 说明 |
---|
public long getTime() | 获取时间对象的毫秒值 |
public long setTime(long time) | 设置日期对象的时间为当前时间毫秒值对应的时间 |
SimpleDateFormat
- 可以对Date对象或时间毫秒值格式化成我们喜欢的时间形式。
- 也可以把字符串的时间形式解析成日期对象。
- SimpleDateFormat的构造器:
构造器 | 说明 |
---|
public SimpleDateFormat() | 构造一个SimpleDateFormat,使用默认格式 |
public SimpleDateFormat(String pattern) | 构造一个SimpleDateFormat,使用指定的格式 |
格式化方法 | 说明 |
---|
public final String format(Date date) | 将日期格式化成日期/时间字符串 |
public final String format(Object date) | 将时间毫秒值格式化成日期/时间字符串 |
- 格式化的时间形式的常用模板表示:
yyyy年MM月dd日 HH:mm:ss EEE a
- y 年
- M 月
- d 日
- H 时
- m 分
- s 秒
- E 周几
- a 上下午
- SimpleDateFormat解析字符串时间成为日期对象:
解析方法 | 说明 |
---|
public Date parse(String source) | 从给定字符串的开始解析文本以生成日期 |
Calendar
- Calendar代表了系统此刻日期对应的日历对象。
- Calendar是一个抽象类,不能直接创建对象。
- Calendar日历类创建日历对象的方法:
方法名 | 说明 |
---|
public static Calendar getInstance() | 获取当前日历对象 |
方法名 | 说明 |
---|
public int get(int field) | 取日期中的某个字段信息。 |
public void set(int field,int value) | 修改日历的某个字段信息。 |
public void add(int field,int amount) | 为某个字段增加/减少指定的值。 |
public final Date getTime() | 拿到此刻日期对象。 |
public long getTimeInMillis() | 拿到此刻时间毫秒值。 |
JDK8新增日期类
概述
- 从Java 8开始,java.time包提供了新的日期和时间API,主要涉及的类型有:
- LocalDate: 不包含具体时间的日期。
- LocalTime: 不含日期的时间。
- LocalDateTime: 包含了日期和时间。
- Instant: 代表的是时间戳。
- DateTimeFormatter: 用于做时间的格式化和解析的。
- Duration: 用于计算两个“时间”间隔。
- Period: 用于计算两个“日期”间隔。
- 新增的API严格区分了时刻、本地日期、本地时间,并且,对日期和时间进行运算更加方便。
- 其次,新API的类型几乎全部是不变类型(和String的使用类似),可以放心使用不必担心被修改。
LocalDate、LocalTime、LocalDateTime
- 它们分别表示日期,时间,日期时间对象,它们的类的实例是不可变的对象。
- 它们三者构建对象和API都是通用的。
- 构建对象的方式如下:
方法名 | 说明 | 示例 |
---|
public static Xxxx now(); | 静态方法,根据当前时间创建对象 | LocalDate localDate = LocalDate.now(); LocalTime localTime = LocalTime.now(); LocalDateTime localDateTime = LocalDateTime.now(); |
public static Xxxx of(…); | 静态方法,指定日期/时间创建对象 | LocalDate localDate = LocalDate.of(2099,11,11); LocalTime localTime = LocalTime.of(11,11,11); LocalDateTime localDateTime = LocalDateTime.of(2020,10,6,13,23,43); |
- LocalDate、LocalTime、LocalDateTime获取信息的API:
方法名 | 说明 |
---|
public int getYear() | 获取年 |
public int getMonthValue() | 获取月份(1-12) |
public int getDayOfMonth() | 获取月中第几天 |
public int getDayOfYear() | 获取年中第几天 |
public DayOfWeek getDayOfWeek() | 获取星期 |
- LocalDateTime可以转换成LocalDate和LocalTime。
方法名 | 说明 |
---|
public LocalDate toLocalDate() | 转换成一个LocalDate对象 |
public LocalDate toLocalTime() | 转换成一个LocalTime对象 |
Instant时间戳
- JDK8获取时间戳特别简单,且功能丰富。Instant类由一个静态的工厂方法now()可以返回当前时间戳。
- 时间戳是包含日期和时间的,与java.util.Date很类似,事实上Instant就是类似JDK8以前的Date。
- Instant和Date这两个类可以进行转换。
DateTimeFormatter
- 在JDK8中,引入了一个全新的日期与时间格式器DateTimeFormatter。
- 正反都能调用format方法。
LocalDateTime ldt = LocalDateTime.now();
DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
ldt.format(dtf);
dtf.format(ldt);
Duration/Period
Period
- 在Java8中,我们可以使用以下类来计算日期间隔差异:java.time.Period
- 主要是Period类方法getYears(),getMonths()和getDays()来计算,只能精确到年月日。
- 用于LocalDate之间的比较。
Duration
- 在Java8中,我们可以使用以下类来计算时间间隔差异:java.time.Duration
- 提供了使用基于时间的值测量时间量的方法。
- 用于LocalDateTime之间的比较。也可用于Instant之间的比较。
包装类
基本数据类型 | 引用数据类型 |
---|
byte | Byte |
short | Short |
int | Integer |
long | Long |
char | Character |
float | Float |
double | Double |
boolean | Boolean |
- Java为了实现一切皆对象,为8种基本数据类型提供了对应的引用类型。
- 后面的集合和泛型其实也只能支持包装类型,不支持基本数据类型。
- 自动装箱: 基本类型的数据和变量可以直接赋值给包装类型的变量。
- 自动拆箱: 包装类型的变量可以直接赋值给基本数据类型的变量。
- 包装类的特有功能:
- 包装类的变量的默认值可以是null,容错率更高。
- 可以把基本类型的数据转换成字符串类型(用处不大)。
- 可以把字符串类型的数值转换成真实的数据类型(用处很大)。