一 Date类
java.util.Date`类 表示特定的瞬间,精确到毫秒。
1 Date 类的构造方法
Date 类有多种构造方法,可以通过不同的方式创建 Date 对象。
1. Date() 构造方法
该构造方法不带任何参数,用于创建一个表示当前时间的 Date 对象。它会返回一个表示当前日期和时间的 Date 实例。
java
Date now = new Date();
System.out.println(now); // 输出当前日期和时间 Tue Jan 16 14:37:35 CST 2024
2 Date(long millis) 构造方法
该构造方法使用从 1970年1月1日00:00:00 UTC(称为"纪元时间"或"Unix时间")以来的毫秒数来创建 Date 对象。可以通过 System.currentTimeMillis() 方法获取当前的毫秒时间。
java
long millis = System.currentTimeMillis(); // 获取当前时间的毫秒表示
Date dateFromMillis = new Date(millis);
System.out.println(dateFromMillis); // 输出基于毫秒的日期和时间
2. Date 类的常用方法
Date 类提供了许多方法用于处理日期和时间,包括获取时间、比较日期等。虽然许多方法已经过时,但它们仍然在某些场合被使用。
2.1 getTime()
该方法返回一个 long 类型的值,表示 Date 对象所表示的时间,从 1970 年 1 月 1 日 00:00:00 UTC 到该 Date 对象的时间的毫秒数。
java
Date now = new Date();
long timeInMillis = now.getTime();
System.out.println(timeInMillis); // 输出时间的毫秒表示
2.2 setTime(long time)`
把方法参数给定的毫秒值设置给日期对象
java
public class DateDemo02 {
public static void main(String[] args) {
//创建日期对象
Date d = new Date();
//public long getTime():获取的是日期对象从1970年1月1日 00:00:00到现在的毫秒值
//System.out.println(d.getTime());
//System.out.println(d.getTime() * 1.0 / 1000 / 60 / 60 / 24 / 365 + "年");
//public void setTime(long time):设置时间,给的是毫秒值
//long time = 1000*60*60;
long time = System.currentTimeMillis();
d.setTime(time);
System.out.println(d);
}
}
2.3 after(Date when) 和 before(Date when)
after() 方法检查当前 Date 是否在指定日期之后,而 before() 方法检查当前 Date 是否在指定日期之前。这两个方法用于比较两个日期的先后关系。
java
Date now = new Date();
Date anotherDate = new Date(System.currentTimeMillis() - 10000000L); // 过去的一个时间
System.out.println(now.after(anotherDate)); // 输出 true,表示 now 在 anotherDate 之后
System.out.println(now.before(anotherDate)); // 输出 false,表示 now 不在 anotherDate 之前
二 SimpleDateFormat类
SimpleDateFormat 类是 Java 中用于格式化和解析日期的类,它允许将日期对象转换为指定格式的字符串,或者将格式化的字符串转换为 Date 对象。它是 java.text 包的一部分,提供了非常灵活的日期时间格式化功能。
1. 常用构造方法
SimpleDateFormat 有多个构造方法,常用的两个是:
1.1 SimpleDateFormat(String pattern)
这个构造方法通过指定日期时间的模式字符串来创建 SimpleDateFormat 实例。模式字符串由字母、符号和数字组成,代表不同的日期和时间元素。
java
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
在这个例子中,"yyyy-MM-dd HH:mm:ss" 是一个日期时间格式,表示年份、月份、日期、小时、分钟和秒。具体含义如下:
- yyyy:四位数年份
- MM:两位数月份(01-12)
- dd:两位数日期(01-31)
- HH:24小时制的两位数小时(00-23)
- mm:两位数分钟(00-59)
- ss:两位数秒数(00-59)
2. 格式化日期:format() 方法
SimpleDateFormat 的 format() 方法用于将 Date 对象转换为指定格式的字符串。
java
import java.text.SimpleDateFormat;
import java.util.Date;
public class DateFormatExample {
public static void main(String[] args) {
// 创建一个 SimpleDateFormat 对象
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
// 获取当前日期时间
Date now = new Date();
// 将当前日期格式化为字符串
String formattedDate = sdf.format(now);
// 输出格式化后的日期
System.out.println(formattedDate); // 输出类似 2025-01-25 14:20:01 的字符串
}
}
3. 解析字符串:parse() 方法
SimpleDateFormat 的 parse() 方法用于将一个符合指定格式的日期字符串解析为 Date 对象。此方法会抛出 ParseException,因此需要处理异常。
java
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
public class DateParseExample {
public static void main(String[] args) throws ParseException {
// 创建一个 SimpleDateFormat 对象
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
// 要解析的日期字符串
String dateStr = "2025-01-25 14:20:01";
// 解析日期字符串
Date date = sdf.parse(dateStr);
// 输出解析后的 Date 对象
System.out.println(date); // 输出 2025-01-25 14:20:01.0
}
}
4 自定义格式
SimpleDateFormat 支持各种格式符号,可以根据需要自定义日期的格式。以下是一些常用的符号:
- y:年份(yyyy 代表四位年份,如 2025,yy 代表两位年份,如 25)
- M:月份(MM 代表两位数月份,如 01 到 12)
- d:日(dd 代表两位数日期,如 01 到 31)
- H:小时(24小时制,HH 代表两位数小时,如 00 到 23)
- m:分钟(mm 代表两位数分钟,如 00 到 59)
- s:秒(ss 代表两位数秒数,如 00 到 59)
- E:星期几(E 代表简写星期几,如 Mon,EEEE 代表全名星期几,如 Monday)
- a:AM/PM(a 显示上午或下午)
三 Calendar 类
Calendar 类是 Java 中用于处理日期和时间的一个抽象类,它属于 java.util 包。相比于老旧的 Date 类,Calendar 提供了更强大和灵活的日期和时间操作功能。通过 Calendar 类,可以对日期进行修改、加减、比较等操作。
1. Calendar 类概述
Calendar 类是一个抽象类,不能直接实例化。你需要通过 Calendar.getInstance()
获取其具体实现类的实例。Calendar 提供了一些方法来获取当前日期和时间,修改日期、加减日期,比较日期等。
2. 获取 Calendar 实例
Calendar 类本身是抽象类,因此不能直接使用 new 创建实例。你需要通过 Calendar.getInstance() 方法获取一个 Calendar 对象。
java
import java.util.Calendar;
public class CalendarExample {
public static void main(String[] args) {
// 获取当前的 Calendar 实例
Calendar calendar = Calendar.getInstance();
// 输出当前日期和时间
System.out.println("当前日期和时间: " + calendar.getTime());
}
}
当前日期和时间: Sat Jan 25 15:49:51 CST 2025
3. 获取和设置日期和时间
3.1 获取日期和时间的各个字段
Calendar 类提供了 get() 方法来获取日期和时间的各个字段,如年份、月份、日期、小时、分钟、秒等。
java
import java.util.Calendar;
public class CalendarGetExample {
public static void main(String[] args) {
Calendar calendar = Calendar.getInstance();
// 获取年月日时分秒等字段
int year = calendar.get(Calendar.YEAR);
int month = calendar.get(Calendar.MONTH) + 1; // 月份从0开始
int day = calendar.get(Calendar.DAY_OF_MONTH);
int hour = calendar.get(Calendar.HOUR_OF_DAY);
int minute = calendar.get(Calendar.MINUTE);
int second = calendar.get(Calendar.SECOND);
System.out.println("当前日期: " + year + "-" + month + "-" + day);
System.out.println("当前时间: " + hour + ":" + minute + ":" + second);
}
}
当前日期: 2025-1-25
当前时间: 15:50:56
3.2 设置日期和时间
Calendar 类提供了 set() 方法,允许你设置某个字段的值,比如年、月、日、时、分、秒等。
java
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
public class DateDemo {
public static void main(String[] args) throws ParseException {
Calendar calendar = Calendar.getInstance();
// 设置日期为 2025年1月1日
calendar.set(Calendar.YEAR, 2025);
calendar.set(Calendar.MONTH, 0); // 月份从0开始,0表示1月
calendar.set(Calendar.DAY_OF_MONTH, 1);
// 设置时间为12:00:00
calendar.set(Calendar.HOUR_OF_DAY, 12);
calendar.set(Calendar.MINUTE, 0);
calendar.set(Calendar.SECOND, 0);
System.out.println("设置后的日期和时间: " + calendar.getTime());
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String format = sdf.format(calendar.getTime());
System.out.println(format);
}
}
设置后的日期和时间: Wed Jan 01 12:00:00 CST 2025
2025-01-01 12:00:00
4. 日期加减操作
Calendar 类的 add() 方法允许你对日期进行加减操作。例如,加 5 天,或者减 2 个月。
java
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
public class DateDemo {
public static void main(String[] args) throws ParseException {
Calendar calendar = Calendar.getInstance();
// 加5天
calendar.add(Calendar.DAY_OF_MONTH, 5);
// 减2个月
calendar.add(Calendar.MONTH, -2);
System.out.println("加减后的日期: " + calendar.getTime());
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String format = sdf.format(calendar.getTime());
System.out.println(format);
}
}
加减后的日期: Sat Nov 30 15:56:11 CST 2024
2024-11-30 15:56:11
5. 比较日期
Calendar 类提供了 before()、after() 和 equals() 方法,可以用来比较两个 Calendar 对象的日期。
java
import java.util.Calendar;
public class CalendarComparisonExample {
public static void main(String[] args) {
Calendar calendar1 = Calendar.getInstance();
Calendar calendar2 = Calendar.getInstance();
// 将 calendar2 的日期设置为 2020 年
calendar2.set(Calendar.YEAR, 2020);
// 比较两个日期
if (calendar1.after(calendar2)) {
System.out.println("calendar1 的日期晚于 calendar2");
} else {
System.out.println("calendar1 的日期早于或等于 calendar2");
}
}
}
6. 获取 Date 对象
通过 getTime() 方法,可以将 Calendar 转换为 Date 对象,Date 对象表示 Calendar 中的日期和时间。
java
import java.util.Calendar;
import java.util.Date;
public class CalendarToDateExample {
public static void main(String[] args) {
Calendar calendar = Calendar.getInstance();
// 获取 Calendar 中的 Date 对象
Date date = calendar.getTime();
System.out.println("Date 对象: " + date);
}
}