日期时间类
Date类(日期时间)
java.util.Date 类
java.util.Date
是一个类,用于表示特定的瞬间,精确到毫秒。它通常用于存储和操作日期和时间。
创建 Date 对象:
Date now = new Date(); // 当前时间
Date birthday = new Date(95, 11, 17); // 1995年12月17日,注意月份是从0开始的,11代表12月
获取时间信息:
int year = now.getYear() + 1900; // 获取年份
int month = now.getMonth() + 1; // 获取月份,月份是从0开始的
int day = now.getDate(); // 获取天
int hours = now.getHours(); // 获取小时
// 还有其他方法如 getMinutes(), getSeconds() 等
设置时间信息:
now.setYear(95); // 设置年份
now.setMonth(11); // 设置月份
now.setDate(17); // 设置天
now.setHours(0); // 设置小时
// 还有其他方法如 setMinutes(), setSeconds() 等
比较 Date 对象:
boolean isBefore = now.before(birthday); // 检查当前时间是否在生日之前
boolean isAfter = now.after(birthday); // 检查当前时间是否在生日之后
boolean isEqual = now.equals(birthday); // 检查两个日期是否相等
java.util.Calendar 类
java.util.Calendar
类是一个抽象类,它提供了一些静态方法来获取实例,用于更复杂的日期时间操作。
获取 Calendar 实例:
Calendar calendar = Calendar.getInstance(); // 获取默认时区和语言环境的日历实例
使用 Calendar 获取和设置日期时间:
int year = calendar.get(Calendar.YEAR); // 获取年份
int month = calendar.get(Calendar.MONTH) + 1; // 获取月份,Calendar.MONTH 从0开始
int day = calendar.get(Calendar.DAY_OF_MONTH); // 获取天数
// 设置日期时间
calendar.set(year, Calendar.DECEMBER, 17); // 设置日期,Calendar.DECEMBER 代表12月
日期时间的加减操作:
calendar.add(Calendar.DAY_OF_MONTH, 1); // 增加一天
calendar.add(Calendar.YEAR, -1); // 减去一年
java.time 包
从Java 8开始,引入了新的日期和时间API,位于 java.time
包中,提供了更丰富和更直观的日期时间操作。
使用 LocalDate, LocalTime, LocalDateTime:
LocalDate today = LocalDate.now(); // 获取当前日期
LocalTime currentTime = LocalTime.now(); // 获取当前时间
LocalDateTime dateTime = LocalDateTime.now(); // 获取当前日期和时间
日期时间格式化:
// 使用java.time.format.DateTimeFormatter
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
String formattedDateTime = dateTime.format(formatter);
SimpleDateFormat类(格式化)
SimpleDateFormat
是 Java 中的一个类,它属于 java.text
包,用于解析和格式化日期。这个类允许你定义日期和时间的显示格式,例如,你可以指定日期应该显示为 "MM/dd/yyyy" 格式,时间显示为 "HH:mm:ss" 格式。
下面是一些常用的格式化模式字符:
y
或yy
:年份(两位或四位)M
或MM
:月份(没有前导零或两位数字)d
或dd
:日(没有前导零或两位数字)H
或HH
:小时(24小时制,没有前导零或两位数字)m
或mm
:分钟(没有前导零或两位数字)s
或ss
:秒(没有前导零或两位数字)S
:毫秒E
:星期的缩写EEE
:星期的全称a
:上午或下午
使用 SimpleDateFormat
时,需要创建一个实例,并提供一个模式字符串。然后,可以使用 format(Date date)
方法来格式化日期,或者使用 parse(String source)
方法来解析字符串为日期。
import java.text.SimpleDateFormat;
import java.util.Date;
public class DateFormatExample {
public static void main(String[] args) {
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date date = new Date();
// 格式化日期
String formattedDate = dateFormat.format(date);
System.out.println("Formatted Date: " + formattedDate);
// 解析日期
try {
Date parsedDate = dateFormat.parse("2024-08-05 15:30:00");
System.out.println("Parsed Date: " + parsedDate);
} catch (Exception e) {
e.printStackTrace();
}
}
}
Calendar类(日历)
Java 中的 Calendar
类是 java.util
包的一部分,它是一个抽象类,提供了一种机制来操作日期和时间。Calendar
类本身不直接实例化,而是通过其子类如 GregorianCalendar
来使用。Calendar
类提供了一套方法来获取和设置日期和时间字段,如年、月、日、小时等。
Calendar
类的一些常用方法:
int get(int field)
: 获取给定日历字段的值。void set(int year, int month, int date, int hourOfDay, int minute, int second)
: 设置日历的字段值。void add(int field, int amount)
: 给日历字段加上指定的时间量。boolean after(Object when)
: 测试此日历的日期/时间是否在指定日期/时间之后。boolean before(Object when)
: 测试此日历的日期/时间是否在指定日期/时间之前。void roll(int field, boolean up)
: 将指定的日历字段向上或向下滚动,但不改变更大的字段。
Calendar
类定义了多种字段常量,用于指定日期时间的各个部分:
Calendar.YEAR
Calendar.MONTH
Calendar.DAY_OF_MONTH
Calendar.HOUR_OF_DAY
Calendar.MINUTE
Calendar.SECOND
import java.util.Calendar;
import java.util.GregorianCalendar;
public class CalendarExample {
public static void main(String[] args) {
// 创建一个Calendar实例
Calendar calendar = new GregorianCalendar();
// 获取当前日期和时间
int year = calendar.get(Calendar.YEAR);
int month = calendar.get(Calendar.MONTH); // 注意:月份是从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("Current Date and Time: "
+ year + "-" + (month + 1) + "-" + day + " "
+ hour + ":" + minute + ":" + second);
// 设置日期和时间
calendar.set(year, month, day, 10, 0, 0);
// 添加时间
calendar.add(Calendar.MINUTE, 30); // 增加30分钟
// 测试日期和时间
if (calendar.before(new GregorianCalendar())) {
System.out.println("The calendar time is in the past.");
} else {
System.out.println("The calendar time is in the future.");
}
}
}
请注意,Calendar
类是线程不安全的,因此,如果你需要在多线程环境中使用它,应该在每个线程中创建独立的实例。此外,Calendar
类依赖于系统默认的时区和语言环境设置。如果你需要在特定的时区或语言环境中使用 Calendar
,你应该在创建 Calendar
实例时设置相应的 TimeZone
和 Locale
。