日期时间类

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" 格式。

下面是一些常用的格式化模式字符:

  • yyy:年份(两位或四位)
  • MMM:月份(没有前导零或两位数字)
  • ddd:日(没有前导零或两位数字)
  • HHH:小时(24小时制,没有前导零或两位数字)
  • mmm:分钟(没有前导零或两位数字)
  • sss:秒(没有前导零或两位数字)
  • 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 实例时设置相应的 TimeZoneLocale

posted @ 2024-08-06 10:23  墨澜  阅读(6)  评论(0编辑  收藏  举报