Java中日期时间如何表示?
基本概念:
早期Java1.0中就存在了的Java.util.Date类,用来处理日期和时间的类。但是在Java8中,引入了新的日期和时间API,也就是Java.time包,它提供了更强大、更易用的日期和时间处理功能。
我们先从Date类开始学习起,要想使用Date类下的方法,那么我们就需要初始化Date对象.
Java中提供了俩个构造函数来实例化Date对象。
1.默认的无参构造器
Date()
2.接受一个参数的有参构造器,该参数是从 1970 年 1 月 1 日起的毫秒数。
Date(long millisec)
实例化对象后就可以使用以下的Date类常用方法以及示例
-
toString()
:将
Date` 对象转换为字符串表示。import java.util.Date; Date date = new Date(); String dateString = date.toString(); System.out.println("日期时间的字符串表示:" + dateString);
输出:
日期时间的字符串表示:Fri Jul 23 05:45:11 CST 2023
-
getTime()
:获取自1970年1月1日以来的毫秒数。import java.util.Date; Date date = new Date(); long timestamp = date.getTime(); System.out.println("日期时间的毫秒数:" + timestamp);
输出:
日期时间的毫秒数:1678499111764
-
equals()
:比较两个Date
对象是否相等。import java.util.Date; Date date1 = new Date(); Date date2 = new Date(); boolean isEqual = date1.equals(date2); System.out.println("两个日期是否相等:" + isEqual);
输出:
两个日期是否相等:false
-
before()
和after()
:比较一个Date
对象是否在另一个Date
对象之前或之后。
import java.util.Date;
Date date1 = new Date(); // 当前时间
Date date2 = new Date(1234567890000L); // 指定时间
boolean isBefore = date1.before(date2);
boolean isAfter = date1.after(date2);
System.out.println("date1 是否在 date2 之前:" + isBefore);
System.out.println("date1 是否在 date2 之后:" + isAfter);
输出:
date1 是否在 date2 之前:false
date1 是否在 date2 之后:true
以上是Date类常用的方法,并且使用例子,除了在掌握这些办法之外,我们还需要认识到,
java.util.Date
类存在一些问题,它的设计够不安全,特别是在多线程环境下,不推荐直接使用。**并且其年份起始于1900年,月份从0开始计数等等。**在 Java 8 及更高版本中,推荐使用 java.time
包中的日期和时间类来替代 Date
类,以获得更强大和安全的功能。
Java8中引入的新特性-新的Date-Time API加强对日期和时间的处理(Java高级编程中会学习到,建议主学这个更方便使用)
基本概念:
在 java.time
包中,引入了许多新的类,如 Instant
、LocalDate
、LocalTime
、LocalDateTime
、ZonedDateTime
等,它们提供了更灵活和易于操作的日期和时间功能。这些新的日期和时间类使得处理日期和时间更加直观和简洁,并且修复了一些旧的 API 存在的问题。
java.time
是 Java 8 引入的包含日期和时间 API 的包。它提供了一组用于处理日期、时间、时间间隔和时区的类。
以下是 java.time
包中一些常用的类:
LocalDate
:表示处理日期(年、月、日)的类。LocalTime
:表示处理时间(小时、分钟、秒和纳秒)的类。LocalDateTime
:表示同时处理日期和时间的类。ZonedDateTime
:表示带有时区信息的日期和时间的类。Instant
:表示时间线上的一个瞬时点。Duration
:表示两个时间点之间的时间间隔。Period
:表示两个日期之间的时间间隔。DateTimeFormatter
:用于格式化和解析日期和时间的类。ZoneId
:表示时区的标识符。ZoneOffset
:表示相对于协调世界时(UTC)的固定偏移量。
这些类提供了丰富的功能,可以进行日期和时间的创建、操作、格式化、解析等操作,并且尽量避免了之前 java.util.Date
类的一些问题。使用 java.time
包可以更加方便、直观地处理日期和时间。
1.获取当前日期,并使用将其格式化为指定的字符串表示形式。
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
public class Main {
public static void main(String[] args) {
LocalDate date = LocalDate.now();
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
String formattedDate = date.format(formatter);
System.out.println("当前日期:" + formattedDate);
}
}
输出:
当前日期:2023-07-23
这个示例演示了如何使用 java.time.LocalDate
类获取当前日期,并使用 java.time.format.DateTimeFormatter
类将其格式化为指定的字符串表示形式。
2.获取当前日期和时间:
import java.time.LocalDate;
import java.time.LocalTime;
import java.time.LocalDateTime;
public class CurrentDateTimeExample {
public static void main(String[] args) {
LocalDate currentDate = LocalDate.now();
LocalTime currentTime = LocalTime.now();
LocalDateTime currentDateTime = LocalDateTime.now();
System.out.println("当前日期:" + currentDate);
System.out.println("当前时间:" + currentTime);
System.out.println("当前日期和时间:" + currentDateTime);
}
}
输出:
当前日期:2023-07-23
当前时间:07:25:08.123456789
当前日期和时间:2023-07-23T07:25:08.123456789
在这个例子中,我们使用 now()
方法从系统时钟获取了当前的日期、时间和日期时间。
3.创建特定日期和时间:
import java.time.LocalDate;
import java.time.LocalTime;
import java.time.LocalDateTime;
public class DateTimeCreationExample {
public static void main(String[] args) {
LocalDate date = LocalDate.of(2023, 7, 23);
LocalTime time = LocalTime.of(10, 30, 45);
LocalDateTime dateTime = LocalDateTime.of(date, time);
System.out.println("特定日期:" + date);
System.out.println("特定时间:" + time);
System.out.println("特定日期和时间:" + dateTime);
}
}
输出:
特定日期:2023-07-23
特定时间:10:30:45
特定日期和时间:2023-07-23T10:30:45
在这个例子中,我们使用 of()
方法创建了特定的日期、时间和日期时间。of()
方法是 java.time.LocalDate
、java.time.LocalTime
和 java.time.LocalDateTime
类中用于创建实例的静态方法,它们接受不同的参数来表示日期、时间和日期时间的各个部分。使用这些方法可以方便地创建指定日期、时间或日期时间的对象实例。
这些例子展示了 java.time
包的一些常见用法,包括获取当前日期和时间以及创建特定的日期、时间和日期时间。使用 java.time
,我们可以更轻松地处理日期和时间,提供更好的可读性和易用性。
结尾语:记录于2023年7月23号15时30分,以上仅为个人在Java菜鸟教程Date和Java8新特性的学习过程中遇到的问题,还有记录的个人想法,有错误欢迎指出,感谢