java.time
java.util
日期时间 API 及其格式化 API已SimpleDateFormat
过时且容易出错。建议完全停止使用它们并切换到现代 Date-Time API *。
另外,下面引用的是来自Joda-Time主页的通知:
请注意,从 Java SE 8 开始,用户被要求迁移到 java.time (JSR-310) - JDK 的核心部分,它取代了这个项目。
使用java.time
现代日期时间 API 的解决方案:如果您只想获取日期和时间(而不是时区信息),您可以使用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
ONLINE DEMO
如果要获取日期和时间以及时区信息,可以使用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]
ONLINE DEMO
从Trail: Date Time了解有关现代日期时间 API 的更多信息。
* 出于任何原因,如果您必须坚持使用 Java 6 或 Java 7,则可以使用ThreeTen-Backport,它将大部分java.time功能向后移植到 Java 6 和 7。如果您正在为 Android 项目和 Android API 工作level 仍然不符合 Java-8,请检查Java 8+ APIs available through desugaring和How to use ThreeTenABP in Android Project。