calendar
包路径:java.util包下
/**
* TimeZone:
* 表示时区偏移量,如 中国/重庆(Asia/Chongqing) 等等。
* 注:GMT+08:00 为中国所在时区(东八区)
*/
// 如果输入不存在的,默认以GMT(格林尼治标准时间,世界标准时间)
TimeZone.getTimeZone("GMT").getDisplayName();
// 中国标准时间
TimeZone.getTimeZone("Asia/Chongqing").getDisplayName();
// 香港时间
TimeZone.getTimeZone("Asia/Hong_Kong").getDisplayName();
/**
* Locale:
* 表示语言环境,如 中国China、SIMPLIFIED_CHINESE(简体中文), 加拿大(Canada),美国(US),英国(UK)。
*/
// 构造参数意思: zh: 语言, CN: 国家
Locale zh = new Locale("zh", "CN");
/**
* Calendar: 线程不安全 默认以(周日 1)为一周的起始
* 常量:
* Calendar.YEAR: 表示年 Calendar.MONTH: 表示月 Calendar.DATE: 表示当月中的天数
* Calendar.DAY_OF_WEEK_IN_MONTH: 表示当月中的第几周 Calendar.DAY_OF_WEEK: 表示周中的第几天
*
*
*/
Calendar calendar = Calendar.getInstance(TimeZone.getDefault(), zh);
Calendar calendar1 = Calendar.getInstance();
// 2019-04-16 12:00:15
calendar1.set(2019, Calendar.MAY, 16, 12, 0, 15);
// 当前时间
Date time = calendar.getTime();
// 设置一周的起始为周一
calendar.setFirstDayOfWeek(Calendar.MONDAY);
// 获取一周的起始 周日(1) 周一(2)
int firstDayOfWeek = calendar.getFirstDayOfWeek();
// calendar1在calendar之前返回true
boolean before = calendar.before(calendar1);
// calendar1在calendar之后返回true
boolean after = calendar.after(calendar1);
// 当前时间加1天
calendar.add(Calendar.DATE, 1);
LocalDate: JDK.1.8 新增
包路径: java.time
/**
* ZoneId:
* 表示时区, 如: 亚洲/重庆(Asia/Chongqing), 亚洲/上海(Asia/Shanghai)
*/
ZoneId of = ZoneId.of("Asia/Shanghai");
/**
* Clock:
* 该类提供了访问当前日期和时间的方法,Clock是时区敏感的,
* 可以用来取代 System.currentTimeMillis() 来获取当前的毫秒数
*/
Clock clock = Clock.systemDefaultZone();
// 毫秒数
long millis = clock.millis();
/**
* DateTimeFormatter: 时间格式化常量
* DateTimeFormatter.ofPattern("yyyy-MM-dd") 自定义格式化
* y: 年
* M: 5 MM: 05 MMM:Jul MMMM:July
* D: 一年中的第几天
* d: 3 dd: 03
* Q/q: 每年的季度
* a: 上午/下午(注:只有LocalDateTime和LocalTime可以获得)
*/
/**
* 注: LocalDate、LocalDateTime等所有类都实现了Temporal接口
* Duration、Period、ChronoPeriodImpl等类都实现了TemporalAmount接口
*/
/**
* ChronoUnit: 该枚举类实现了TemporalUnit接口, 用于日期的单位
* 时间单位枚举类,计算日期相隔天数等 可以获取所有时间类型的差
* 注: 扩展ChronoField(实现了TemporalField接口,用于时间的单位)
*/
LocalDate now = LocalDate.now();
// 开始-结束 相差多少天(如果参数1(开始时间)大参数2(结束时间)之后,那么返回值为负数)
long between = ChronoUnit.DAYS.between(LocalDate.parse("2019-04-11"), now);
System.out.println(between);
/**
* Period: 只适用于包含年月日的LocalDate等
* 开始-结束 年月日相差。
* Period 类表示一段时间的年、月、日,开使用between()方法获取两个日期之间的差作为Period 对象返回
*/
LocalDate birthday = LocalDate.parse("1995-05-19");
Period period = Period.between(birthday, now);
String.format("相差:%1$d年-%2$d月-%3$d日", period.getYears(), period.getMonths(), period.getDays());
/**
* Duration(秒、纳秒): 只适用于包含时间的LocalDateTime、DateTime等
* 开始-结束 时间差。(如果参数1在参数2之前,返回正数,否则返回负数)
*/
Duration duration = Duration.between(LocalTime.of(17,21 , 0), LocalTime.now());
String.format("相差:%1$d秒", duration.getSeconds());
/**
* LocalDate:
* 表示一个具体的日期,但不包含具体时间,也不包含时区信息。 parse()默认以yyyy-MM-dd解析
*/
// 增加1天
LocalDate plus = now.plus(1, ChronoUnit.DAYS);
// 减1天
now.minus(1, ChronoUnit.DAYS);
// 是否为闰年(true)
boolean leapYear = now.isLeapYear();
// 当前月总天数
int i = now.lengthOfMonth();
/**
* DayOfWeek:
* 周常量类, MONDAY(周一) TUESDAY(周二) WEDNESDAY(周三) THURSDAY(周四) FRIDAY(周五) SATURDAY(周六) SUNDAY(周日)
*/
// 本周周几
DayOfWeek dayOfWeek = now.getDayOfWeek();
/**
* LocalTime:
* 表示一个具体的时间,但不包含日期。
*/
LocalTime time = LocalTime.of(12, 1, 15);
/**
* ChronoField:
* 时间单位枚举。
*/
// 支持指定类型枚举(true): 枚举(表示相对于分的秒数)
boolean supported = time.isSupported(ChronoField.SECOND_OF_MINUTE);
// 相对于天过去了多少秒
time.getLong(ChronoField.SECOND_OF_DAY);
// 相对于分过去了多少秒
time.getLong(ChronoField.SECOND_OF_MINUTE);
// 调整参数对象的时间与调用方相同.(也就是把time的时间赋给参数)
Temporal temporal = time.adjustInto(LocalDateTime.now());
/**
* TemporalAdjusters:
* 提供日期获取的静态工具类。 如: 找到本月第一天, 找到下个月的第一天等等。
*/
// 获取指定月的第一天
Temporal temporal1 = TemporalAdjusters.firstDayOfMonth().adjustInto(now);
// 推荐使用这种
LocalDate monthOfFirstDay = now.with(TemporalAdjusters.firstDayOfMonth());
// 增加一小时
LocalTime plus1 = time.plus(Duration.ofHours(1));
/**
* LocalDateTime:
* 就是LocalDate与LocalTime的结合
*/