在Date后引入的Calendar也不能很好的规范时间的数据类型,
在JDK8.0时引入了Time这一新的包
方法不用背,现用现查也可以
java.time
java.time.chrono 提供对不同日历系统的访问
java.time.format 提供格式化和解析时间日期
java.time.temporal 包括底层框架和扩展特性
java.time.zone 包含时区的支持类
方法 | 作用 |
---|---|
now()/ now(ZoneId zone) | 静态方法,根据当前时间创建对象/指定时区的对象 |
of(xx,xx,xx,xx,xx,xxx) | 静态方法,根据指定日期/时间创建对象 |
getDayOfMonth()/getDayOfYear() | 获得月份天数(1-31) /获得年份天数(1-366) |
getDayOfWeek() | 获得星期几(返回一个 DayOfWeek 枚举值) |
getMonth() | 获得月份, 返回一个 Month 枚举值 |
getMonthValue() / getYear() | 获得月份(1-12) /获得年份 |
getHours()/getMinute()/getSecond() | 获得当前对象对应的小时、分钟、秒 |
withDayOfMonth()/withDayOfYear()/withMonth()/withYear() | 将月份天数、年份天数、月份、年份修改为指定的值并返回新的对象 |
with(TemporalAdjuster t) | 将当前日期时间设置为校对器指定的日期时间 |
plusDays(), plusWeeks(), plusMonths(), plusYears(),plusHours() | 向当前对象添加几天、几周、几个月、几年、几小时 |
minusMonths() / minusWeeks()/minusDays()/minusYears()/minusHours() | 从当前对象减去几月、几周、几天、几年、几小时 |
plus(TemporalAmount t)/minus(TemporalAmount t) | 添加或减少一个 Duration 或 Period |
isBefore()/isAfter() | 比较两个 LocalDate |
isLeapYear() | 判断是否是闰年(在LocalDate类中声明) |
format(DateTimeFormatter t) | 格式化本地日期、时间,返回一个字符串 |
parse(Charsequence text) | 将指定格式的字符串解析为日期、时间 |
初始化
public class TimeTest {
public static void main(String[] args) {
//初始化方法now()获取当前时间
LocalTime lt=LocalTime.now();
System.out.println(lt);
LocalDate ld=LocalDate.now();
System.out.println(ld);
LocalDateTime ldt=LocalDateTime.now();
System.out.println(ldt);
//of方法获取指定时间,没有偏移量的设定
LocalDate ld1=LocalDate.of(2012,12,12);
System.out.println(ld1);
//getXXX方法
int dayOfMonth = ld1.getDayOfMonth();
System.out.println(dayOfMonth);
//plus增加日期,原日期不变也体现了Time的不可变性质
LocalDate ld2 = ld1.plusDays(10);
System.out.println(ld1);
System.out.println(ld2);
}
}
类似于Date里的相对于1970年1月1日的毫秒值
方法 | 作用 |
---|---|
now() | 静态方法,返回默认UTC时区的Instant类的对象 |
ofEpochMilli(long epochMilli) | 静态方法,返回在1970-01-01 00:00:00基础上加上指定毫秒数之后的Instant类的对象 |
atOffset(ZoneOffset offset) | 结合即时的偏移来创建一个 OffsetDateTime |
toEpochMilli() | 返回1970-01-01 00:00:00到当前时间的毫秒数,即为时间戳 |
初始化方法
public class InstantTest {
public static void main(String[] args) {
//now()获取当前时间
Instant now = Instant.now();
System.out.println(now); //格林威治伦敦的时区,与我们相差8小时
//atOffSet设置偏移量
OffsetDateTime instant1 = now.atOffset(ZoneOffset.ofHours(8));
System.out.println(instant1);
//ofEpochMilli 设置时间的毫秒数
Instant oneInstant = Instant.ofEpochMilli(13232132445123L);
System.out.println(oneInstant);
}
}
类似于Date使用的SimpleDateFormat , 用于格式化和解析
方法 | 作用 |
---|---|
ofPattern(String pattern) | 静态方法,返回一个指定字符串格式的DateTimeFormatter |
format(TemporalAccessort) | 格式化一个日期、时间,返回字符串 |
parse(CharSequence text) | 将指定格式的字符序列解析为一个日期、时间 |
public class DateTimeFormatTest {
public static void main(String[] args) {
//ofPattern方法自定义格式
DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy-MM-dd hh:mm:ss");
//format方法 格式化 日期、时间---》字符串
LocalDateTime now = LocalDateTime.now();
String format = dtf.format(now);
System.out.println(format);
//parse方法 解析 字符串----》时间日期
TemporalAccessor parse = dtf.parse(format);
LocalDate date = LocalDate.from(parse);
System.out.println(date);
}
}
推荐阅读: