在Java里,日期和时间处理经历了不同阶段,下面为你分别介绍旧版和新版的日期时间处理类与方法。

旧版日期时间处理(Java 8之前)

在Java 8之前,主要使用java.util.Datejava.util.Calendarjava.text.SimpleDateFormat进行日期和时间处理。

  • java.util.Date:该类表示特定的瞬间,精确到毫秒。不过,它的大部分方法已经被弃用。
  • java.util.Calendar:这是一个抽象类,可用于对日期和时间进行计算和操作。
  • java.text.SimpleDateFormat:它能将Date对象格式化为字符串,也能将字符串解析为Date对象。

示例代码如下:

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;

public class OldDateTimeExample {
    public static void main(String[] args) {
        // 创建一个 Date 对象
        Date now = new Date();
        System.out.println("当前日期和时间: " + now);

        // 使用 SimpleDateFormat 格式化日期
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        String formattedDate = sdf.format(now);
        System.out.println("格式化后的日期和时间: " + formattedDate);

        // 使用 SimpleDateFormat 解析日期字符串
        try {
            Date parsedDate = sdf.parse("2024-01-01 12:00:00");
            System.out.println("解析后的日期和时间: " + parsedDate);
        } catch (ParseException e) {
            e.printStackTrace();
        }

        // 使用 Calendar 进行日期计算
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(now);
        calendar.add(Calendar.DAY_OF_MONTH, 1);
        Date tomorrow = calendar.getTime();
        System.out.println("明天的日期和时间: " + tomorrow);
    }
}

新版日期时间处理(Java 8及以后)

Java 8引入了新的日期和时间API,位于java.time包下,提供了更简洁、易用和线程安全的日期和时间处理类。

  • LocalDate:表示日期(年、月、日),不包含时间和时区信息。
  • LocalTime:表示时间(时、分、秒、纳秒),不包含日期和时区信息。
  • LocalDateTime:表示日期和时间,不包含时区信息。
  • ZonedDateTime:表示带时区的日期和时间。
  • DateTimeFormatter:用于格式化和解析日期时间对象。

示例代码如下:

import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.LocalTime;
import java.time.ZonedDateTime;
import java.time.format.DateTimeFormatter;

public class NewDateTimeExample {
    public static void main(String[] args) {
        // 获取当前日期
        LocalDate currentDate = LocalDate.now();
        System.out.println("当前日期: " + currentDate);

        // 获取当前时间
        LocalTime currentTime = LocalTime.now();
        System.out.println("当前时间: " + currentTime);

        // 获取当前日期和时间
        LocalDateTime currentDateTime = LocalDateTime.now();
        System.out.println("当前日期和时间: " + currentDateTime);

        // 获取带时区的日期和时间
        ZonedDateTime zonedDateTime = ZonedDateTime.now();
        System.out.println("带时区的日期和时间: " + zonedDateTime);

        // 使用 DateTimeFormatter 格式化日期时间
        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
        String formattedDateTime = currentDateTime.format(formatter);
        System.out.println("格式化后的日期和时间: " + formattedDateTime);

        // 使用 DateTimeFormatter 解析日期时间字符串
        LocalDateTime parsedDateTime = LocalDateTime.parse("2024-01-01 12:00:00", formatter);
        System.out.println("解析后的日期和时间: " + parsedDateTime);
    }
}

总体而言,Java 8及以后的新日期时间API更为推荐,因为它更简洁、线程安全,并且避免了旧版API的一些问题。