Java 8新增了LocalDate和LocalTime接口,为什么要搞一套全新的处理日期和时间的API?因为旧的java.util.Date实在是太难用了。
java.util.Date月份从0开始,一月是0,十二月是11,变态吧!java.time.LocalDate月份和星期都改成了enum,就不可能再用错了。
java.util.Date和SimpleDateFormatter都不是线程安全的,而LocalDate和LocalTime和最基本的String一样,是不变类型,不但线程安全,而且不能修改。
java.util.Date是一个“万能接口”,它包含日期、时间,还有毫秒数,如果你只想用java.util.Date存储日期,或者只存储时间,那么,只有你知道哪些部分的数据是有用的,哪些部分的数据是不能用的。在新的Java 8中,日期和时间被明确划分为LocalDate和LocalTime,LocalDate无法包含时间,LocalTime无法包含日期。当然,LocalDateTime才能同时包含日期和时间。
新接口更好用的原因是考虑到了日期时间的操作,经常发生往前推或往后推几天的情况。用java.util.Date配合Calendar要写好多代码,而且一般的开发人员还不一定能写对。
1. LocalDate
看看新的LocalDate怎么用:
取当前日期:
LocalDate today = LocalDate.now();
根据年月日取日期,12月就是12:
LocalDate crischristmas = LocalDate.of(2016, 12, 25);
或:
LocalDate crischristmas = LocalDate.of(2016, Month.DECEMBER, 25);
根据字符串取:
LocalDate endOfFeb = LocalDate.parse("2016-02-29"); // 严格按照ISO yyyy-MM-dd验证,02写成2都不行,当然也有一个重载方法允许自己定义格式
LocalDate.parse("2016-02-30"); // 无效日期无法通过:DateTimeParseException: Invalid date
日期转换:
取本月第1天:
LocalDate firstDayOfThisMonth = today.with(TemporalAdjusters.firstDayOfMonth());
取本月第2天:
LocalDate secondDayOfThisMonth = today.withDayOfMonth(2);
取本月最后一天,再也不用计算是28,29,30还是31:
LocalDate lastDayOfThisMonth = today.with(TemporalAdjusters.lastDayOfMonth());
取下一天:
LocalDate firstDayOf2015 = lastDayOfThisMonth.plusDays(1);
取2015年1月第一个周一,这个计算用Calendar要死掉很多脑细胞:
LocalDate firstMondayOf2015 = LocalDate.parse("2015-01-01").with(TemporalAdjusters.firstInMonth(DayOfWeek.MONDAY)); // 2015-01-05
2. LocalTime
LocalTime只包含时间,以前用java.util.Date怎么才能只表示时间呢?答案是,假装忽略日期。
LocalTime包含毫秒:
LocalTime now = LocalTime.now(); // 11:09:09.240
你可能想清除毫秒数:
LocalTime now = LocalTime.now().withNano(0)); // 11:09:09
构造时间也很简单:
LocalTime zero = LocalTime.of(0, 0, 0); // 00:00:00
LocalTime mid = LocalTime.parse("12:00:00"); // 12:00:00
时间也是按照ISO格式识别,但可以识别以下3种格式:
12:00
12:01:02
12:01:02.345
分享到:
相关推荐
这个"java8中文文档API"是一个针对Java 8的中文开发文档,以.CHM(Microsoft帮助文件)格式提供,方便中国开发者查阅和学习。CHM文件是一种压缩的HTML帮助文件,通常包含了详细的类库、方法、接口和其他编程元素的...
- 使用 `ZonedDateTime` 或 `Instant`(Java 8 及以上版本)代替 `Date` 和 `Calendar`,它们提供了更强大且易于理解的API。 - 明确指定时区,避免依赖默认时区。 - 在处理时间时,充分考虑夏令时、闰年等因素。 - ...
URL url = new URL(API_URL.replace("YOUR_API_KEY", getApiKey()).replace("2022-10-01", new SimpleDateFormat("yyyy-MM-dd").format(date))); HttpURLConnection connection = (HttpURLConnection) url.open...
在Java 8及更高版本中,引入了新的日期和时间API,其中包括 `LocalDate` 和 `LocalDateTime` 等类。这些类提供了更为简洁和强大的API来处理日期和时间。 ```java LocalDate today = LocalDate.now(); // 获取当前...
Java 8 中文 API 是一套专门为 Java 开发者提供的中文版官方 API 文档,它将原始的英文 API 文档翻译成中文,以便于中文阅读习惯的开发者更好地理解和使用 Java 8 的各种特性和功能。这个 API 包含了类、接口、枚举...
在早期版本的Java中,`Date`类常常被用来处理日期和时间,但由于其API设计不够理想,后来在Java 1.1中引入了`Calendar`类来替代它。 `Date`类的主要方法包括: 1. `Date()`:构造一个表示当前日期和时间的`Date`...
需要注意的是,`Date`类在Java 8之后已经被`java.time`包中的新API所替代,如`LocalDateTime`、`Instant`等,它们提供了更强大、更易用的日期和时间处理功能。但鉴于题目要求,这里主要讨论的是`Date`类的使用。 `...
4. **Date和Time API**:Java 8对日期和时间处理进行了重构,提供了`java.time`包,包含`LocalDate`、`LocalTime`、`LocalDateTime`等类,取代了原有的`java.util.Date`和`Calendar`,提供了更丰富的功能和更好的API...
4. **日期和时间API的改进**:Java 8用`java.time`包取代了过时的`java.util.Date`和`java.util.Calendar`,提供了更直观、更易用的日期和时间API。例如,`LocalDate`, `LocalTime`, 和 `LocalDateTime`等类,使得...
8. **日期与时间**:`java.util.Date`和`java.util.Calendar`是处理日期和时间的基础类,但Java 6引入了`java.text.SimpleDateFormat`和`java.util.SimpleDateFormat`进行更复杂的日期格式化。 9. **反射与注解**:...
此外,Java API也在不断更新,新版本会引入新的特性和改进,如Java 8引入了Lambda表达式和Stream API,Java 11引入了模块系统等。 总之,深入理解并灵活运用Java API是提升Java编程技能的关键,也是Java开发者必备...
需要注意的是,从Java 8开始,`java.time`包提供了更现代和强大的日期时间API,如`LocalDate`、`LocalDateTime`等。虽然这里的需求可以使用`java.util.Date`类完成,但使用`java.time`包中的类通常会提供更好的...
Java 8 API是Java开发的重要参考资料,它包含了Java平台标准版(Java SE)8的所有公共类、接口和方法。这个API文档是由谷歌翻译成中文的,对于中文环境下的开发者来说,是一个非常有价值的资源,便于理解和使用Java ...
Java 8对日期和时间处理进行了彻底的改进,引入了`java.time`包,包括`LocalDate`, `LocalTime`, `LocalDateTime`, `ZonedDateTime`等类,提供了更强大且易于使用的API,取代了之前易用性较差的`java.util.Date`和`...
5. **日期和时间API**:Java 8引入了全新的日期和时间API (`java.time`包),替代了过时的`java.util.Date`和`java.util.Calendar`。新API更加直观,易于使用,如`LocalDate`,`LocalTime`,`LocalDateTime`等类。 6...
总结来说,`java.util.Date`虽然在Java 8之后被新的日期时间API取代,但在旧项目或需要兼容旧版本Java的情况下,仍然有其应用价值。理解并熟练使用`Date`及其相关类,对于Java开发者来说是必要的技能之一。同时,...
最后,`java.sql.Date`类虽然基于`java.util.Date`,但两者在功能上有所不同,而且随着时间推移,Java社区也越来越推荐使用Java 8引入的`java.time`包中的新日期时间API(如`LocalDate`, `LocalDateTime`, `...
java.time包提供了新的日期和时间API,如LocalDate、LocalTime、LocalDateTime等,取代了旧的java.util.Date和Calendar类。 15. **并发工具类**: java.util.concurrent包提供了各种并发工具,如ExecutorService...
这个压缩包“JAVA 编程 API基础 JAVA开发平台,JAVA编程资源----JAVA API.zip”显然包含了关于Java API的基础知识和相关资源,非常适合初学者或希望深入理解Java API的开发者。 Java API基础.doc很可能是文档形式的...