早期Java版本
- 早期JDK使用Date类来表示一个日期,之前推荐使用Calendar类
- Calendar代表一个抽象的日历,我们常用的公历由其子类GregorianCalendar表示
- 通常我们用Calendar.getInstance()方法获得一个默认的日历对象
- 月份的起始值是0而不是1
Calendar的容错性
- 默认情况下,Calendar会自动“向上”增加日期值,比如设置月份13会导致year+1
- 如果希望禁止这种“自动更正”的功能,可以调用其setLenient方法时限
Calendar的延迟特性
- 可以多次带哦用Calendar的set方法调整日期值但只有第一次尝试范根它时值才会最终更新
Java8 之后
为日期和时间处理提供了新的API,改进了原有的设计
- Instant类的实例代表时间轴(time-line)中的一个时刻,它有一个静态方法now()可以取出当前时间
- Duration则代表一个时间段(比如“10s长的一段时间”)
import java.time.Duration;
import java.time.Instant;
import java.util.Calendar;
public class welcome1{
public static void main(String args[]) {
Calendar cal = Calendar.getInstance();
System.out.println(cal);
Instant ints = Instant.now();
System.out.println(ints);
Instant ints1 = Instant.now();
System.out.println(ints1);
Duration dur = Duration.between(ints, ints1);
System.out.println(dur.toMillis());
}
}
本地时间和日期
使用LocalDate、LocalTime、LocalDateTime表示本地时区的时间和日期
public static void main(String[] args)
{
LocalDate currentDate = LocalDate.now();
System.out.println(currentDate);
//2020-03-15
LocalDate specificDate = LocalDate.of(2000,1,1);
System.out.println(specificDate);
//2000-01-01现在月份是基于1的了
LocalTime currentTime = LocalTime.now();
System.out.println(currentTime);
//15:43:52.304714
LocalTime specificTime = LocalTime.of(14,10,12);
System.out.println(specificTime);
//14:10:12
LocalDateTime currentDT = LocalDateTime.now();
System.out.println(currentDT);
//2020-03-15T15:46:46.978545
LocalDateTime specificDT = LocalDateTime.of(specificDate,specificTime);
System.out.println(specificTime);
//2000-01-01T14:10:12
}
日期格式化
- 使用DateTimeFormatter格式化日期
处理时区
每个时区都有一个ZoneId,要获取特定时区的时间,使用ZonedDateTime类