Date类表示的是特定的,瞬间的,它能精确毫秒。
Date 类表示系统特定的时间戳,可以精确到毫秒。Date 对象表示时间的默认顺序是星期、月、日、小时、分、秒、年。
1. 构造方法
Date 类有如下两个构造方法。
Date():此种形式表示分配 Date 对象并初始化此对象,以表示分配它的时间(精确到毫秒),使用该构造方法创建的对象可以获取本地的当前时间。
Date(long date):此种形式表示从 GMT 时间(格林尼治时间)1970 年 1 月 1 日 0 时 0 分 0 秒开始经过参数 date 指定的毫秒数。
Date 类的无参数构造方法获取的是系统当前的时间,显示的顺序为星期、月、日、小时、分、秒、年。
Date 类带 long 类型参数的构造方法获取的是距离 GMT 指定毫秒数的时间,60000 毫秒是一分钟,而 GMT(格林尼治标准时间)与 CST(中央标准时间)相差 8 小时,也就是说 1970 年 1 月 1 日 00:00:00 GMT 与 1970 年 1 月 1 日 08:00:00 CST 表示的是同一时间。
因此距离 1970 年 1 月 1 日 00:00:00 CST 一分钟的时间为 1970 年 1 月 1 日 00:01:00 CST,即使用 Date 对象表示为 Thu Jan 01 08:01:00 CST 1970。
2. 常用方法
Date 类提供了许多与日期和事件相关的方法,其中常见的方法如表 1 所示。
Calendar 类
Calendar 类是一个抽象类,它为特定瞬间与 YEAR、MONTH、DAY_OF—MONTH、HOUR 等日历字段之间的转换提供了一些方法,并为操作日历字段(如获得下星期的日期) 提供了一些方法。
创建 Calendar 对象不能使用 new 关键字,因为 Calendar 类是一个抽象类,但是它提供了一个 getInstance() 方法来获得 Calendar类的对象。getInstance() 方法返回一个 Calendar 对象,其日历字段已由当前日期和时间初始化。
Calendar 对象可以调用 set() 方法将日历翻到任何一个时间,当参数 year 取负数时表示公元前。Calendar 对象调用 get() 方法可以获取有关年、月、日等时间信息,参数 field 的有效值由 Calendar 静态常量指定。
Calendar 类中定义了许多常量,分别表示不同的意义。
Calendar.YEAR:年份。
Calendar.MONTH:月份。
Calendar.DATE:日期。
Calendar.DAY_OF_MONTH:日期,和上面的字段意义完全相同。
Calendar.HOUR:12小时制的小时。
Calendar.HOUR_OF_DAY:24 小时制的小时。
Calendar.MINUTE:分钟。
Calendar.SECOND:秒。
Calendar.DAY_OF_WEEK:星期几。
如果整型变量 month 的值是 0,表示当前日历是在 1 月份;如果值是 11,则表示当前日历在 12 月份。
long currentTimeMillis = System.currentTimeMillis();
Date date=new Date(currentTimeMillis);
System.out.println(date);
System.out.println(new Date());
DateFormat df=DateFormat.getInstance();
System.out.println(df.format(new Date()));
DateFormat dateFormat=new SimpleDateFormat("yyyy 年 MM 月 dd 日 HH 时 mm 分 ss 秒");
System.out.println(dateFormat.format(new Date()));
Date date1=new Date();
long time = date1.getTime();
Calendar calendar=Calendar.getInstance();
calendar.set(2049,10,1);
long timeInMillis = calendar.getTimeInMillis();
long l = (timeInMillis - time) / (1000 * 60 * 60 * 24);
System.out.println("距离2050年10月1日"+l+"天");
Date型与 Calendar型转化
Date型转换为Calendar型Calendar cal = Calendar.getInstance();//取得当前时间Calendar类型
cal.setTime(date); //Date转Calendar
Calendar型转换为Date型Calendar cal = Calendar.getInstance();//取得当前时间Calendar类型
Date cal2date = cal.getTime();//Calendar转Date
Java 接收 MySQL datetime 类型日期字段输出格式问题
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.54</version>
</dependency>
@JsonFormat(pattern = "yyyy 年 MM 月 dd天 HH 时 mm 分 ss 秒")
private Date createTime;
3. LocalDateTime和Date
LocalDateTime
和Date
都是Java中用于表示日期和时间的类,但它们有显著的区别。以下是主要的区别:
1. 包含的位置
java.util.Date
是一个来自Java 1.0的旧类,位于java.util
包中。java.time.LocalDateTime
是在Java 8中引入的新类,位于java.time
包中,属于Java的新日期时间API。
2. 表示的内容
java.util.Date
表示一个特定的瞬间,精确到毫秒。java.time.LocalDateTime
表示一个日期和时间,不包含时区信息。
3. 不变性
java.util.Date
是可变的,意味着它的内部值可以在创建之后更改。java.time.LocalDateTime
是不可变的,意味着一旦创建,它的值就不能更改。
4. 易用性
java.util.Date
提供了较少的操作方法,很多操作需要使用Calendar
类或第三方库(如Joda-Time)。java.time.LocalDateTime
提供了丰富的操作方法,例如日期加减、格式化、解析等,API设计更加现代和易用。
5. 时区处理
java.util.Date
实际上包含了时区信息,但其相关方法已被废弃,且API设计混乱,容易产生混淆。java.time.LocalDateTime
明确不包含时区信息。如果需要处理时区,可以使用ZonedDateTime
或OffsetDateTime
。
6. 格式化和解析
java.util.Date
需要依赖SimpleDateFormat
类进行格式化和解析。java.time.LocalDateTime
提供了更现代的DateTimeFormatter
类,支持线程安全和更灵活的格式化解析方式。
以下是一些代码示例,展示了如何使用这两个类:
java.util.Date
import java.util.Date;
import java.text.SimpleDateFormat;
public class DateExample {
public static void main(String[] args) {
Date date = new Date();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String formattedDate = sdf.format(date);
System.out.println("Formatted Date: " + formattedDate);
// Add one day (not recommended, just for demonstration)
date.setTime(date.getTime() + 24 * 60 * 60 * 1000);
System.out.println("Date after one day: " + sdf.format(date));
}
}
java.time.LocalDateTime
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
public class LocalDateTimeExample {
public static void main(String[] args) {
LocalDateTime dateTime = LocalDateTime.now();
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
String formattedDateTime = dateTime.format(formatter);
System.out.println("Formatted DateTime: " + formattedDateTime);
// Add one day
LocalDateTime dateTimePlusOneDay = dateTime.plusDays(1);
System.out.println("DateTime after one day: " + dateTimePlusOneDay.format(formatter));
}
}