java.time
java.util
日期时间 API 及其格式化 API SimpleDateFormat
已过时且容易出错。建议完全停止使用它们并切换到现代日期时间 API*。
此外,以下是从Joda-Time 的主页引用的通知:
请注意,从 Java SE 8 开始,用户被要求迁移到 java.time(JSR-310)- JDK 的核心部分,该部分取代了此项目。
使用现代日期时间 API java.time
的解决方案: 如果您只想获取日期和时间(而不是时区信息),可以使用 LocalDateTime.#now(ZoneId)
。
非参数化重载的 LocalDateTime.#now
方法返回使用JVM时区的当前日期时间。它相当于使用 LocalDateTime.now(ZoneId.systemDefault())
方法。
演示:
import java.time.LocalDateTime;
import java.time.ZoneId;
public class Main {
public static void main(String[] args) {
LocalDateTime now = LocalDateTime.now(ZoneId.of("Europe/Madrid"));
System.out.println(now);
}
}
一个示例运行的输出:
2021-07-25T15:54:31.574424
在线演示
如果您想获取带有时区信息的日期和时间,可以使用ZonedDateTime.#now(ZoneId)
。它的非参数化变体的行为与上述描述相同。
演示:
import java.time.ZoneId;
import java.time.ZonedDateTime;
public class Main {
public static void main(String[] args) {
ZonedDateTime now = ZonedDateTime.now(ZoneId.of("Europe/Madrid"));
System.out.println(now);
}
}
一个示例运行的输出:
2021-07-25T16:08:54.741773+02:00[Europe/Madrid]
在线演示
从教程:日期时间了解更多现代日期时间API。
* 如果因为任何原因,你必须坚持使用Java 6或Java 7,你可以使用ThreeTen-Backport将大部分java.time功能移植到Java 6和7。如果你正在为一个Android项目工作,而你的Android API级别仍然不符合Java-8,请查看通过desugaring可用的Java 8+ APIs和如何在Android项目中使用ThreeTenABP。