java 日期与时间

Java 的时间 API 是一个非常重要的主题,尤其是 Java 8 引入的 java.time 包,它为日期和时间处理提供了强大的功能。

我们可以按照以下几个主题逐步学习 Java 时间处理:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/5fc40f19a1024d9fa79325da5705b5c6.png
在这里插入图片描述

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

public class DateFormatting {
    public static void main(String[] args) {
        // 当前日期、时间、日期时间
        LocalDate date = LocalDate.now();
        LocalTime time = LocalTime.now();
        LocalDateTime dateTime = LocalDateTime.now();

        // 定义格式化器
        DateTimeFormatter dateFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
        DateTimeFormatter timeFormatter = DateTimeFormatter.ofPattern("HH:mm:ss");
        DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");

        // 格式化
        String formattedDate = date.format(dateFormatter);
        String formattedTime = time.format(timeFormatter);
        String formattedDateTime = dateTime.format(dateTimeFormatter);

        System.out.println("格式化日期: " + formattedDate);
        System.out.println("格式化时间: " + formattedTime);
        System.out.println("格式化日期时间: " + formattedDateTime);
    }
}

在这里插入图片描述

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

public class DateParsing {
    public static void main(String[] args) {
        // 字符串
        String dateString = "2024-12-09";
        String timeString = "14:25:30";
        String dateTimeString = "2024-12-09 14:25:30";

        // 定义解析器(格式需与字符串匹配)
        DateTimeFormatter dateFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
        DateTimeFormatter timeFormatter = DateTimeFormatter.ofPattern("HH:mm:ss");
        DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");

        // 解析
        LocalDate parsedDate = LocalDate.parse(dateString, dateFormatter);
        LocalTime parsedTime = LocalTime.parse(timeString, timeFormatter);
        LocalDateTime parsedDateTime = LocalDateTime.parse(dateTimeString, dateTimeFormatter);

        System.out.println("解析日期: " + parsedDate);
        System.out.println("解析时间: " + parsedTime);
        System.out.println("解析日期时间: " + parsedDateTime);
    }
}

在这里插入图片描述

import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;

public class BuiltInFormatters {
    public static void main(String[] args) {
        // 当前日期时间
        LocalDateTime now = LocalDateTime.now();

        // 使用内置格式化器
        String isoDateTime = now.format(DateTimeFormatter.ISO_LOCAL_DATE_TIME);
        System.out.println("ISO格式日期时间: " + isoDateTime);

        // 使用内置解析器
        LocalDateTime parsedDateTime = LocalDateTime.parse("2024-12-09T14:25:30", 
        	DateTimeFormatter.ISO_LOCAL_DATE_TIME);
        System.out.println("解析的日期时间: " + parsedDateTime);
    }
}

在这里插入图片描述
在这里插入图片描述

import java.time.LocalDate;
import java.time.LocalTime;
import java.time.LocalDateTime;

public class DateTimeCalculation {
    public static void main(String[] args) {
        // 当前日期和时间
        LocalDate date = LocalDate.now();
        LocalTime time = LocalTime.now();
        LocalDateTime dateTime = LocalDateTime.now();

        // 日期加减
        LocalDate plusDays = date.plusDays(5); // 加5天
        LocalDate minusMonths = date.minusMonths(2); // 减2个月

        // 时间加减
        LocalTime plusHours = time.plusHours(3); // 加3小时
        LocalTime minusMinutes = time.minusMinutes(15); // 减15分钟

        // 日期时间加减
        LocalDateTime plusWeeks = dateTime.plusWeeks(1); // 加1周
        LocalDateTime minusYears = dateTime.minusYears(1); // 减1年

        System.out.println("当前日期: " + date);
        System.out.println("加5天: " + plusDays);
        System.out.println("减2个月: " + minusMonths);

        System.out.println("当前时间: " + time);
        System.out.println("加3小时: " + plusHours);
        System.out.println("减15分钟: " + minusMinutes);

        System.out.println("当前日期时间: " + dateTime);
        System.out.println("加1周: " + plusWeeks);
        System.out.println("减1年: " + minusYears);
    }
}

在这里插入图片描述
在这里插入图片描述

import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.Duration;
import java.time.Period;

public class IntervalCalculation {
    public static void main(String[] args) {
        // 日期间隔
        LocalDate startDate = LocalDate.of(2024, 12, 1);
        LocalDate endDate = LocalDate.of(2024, 12, 9);

        Period period = Period.between(startDate, endDate);
        System.out.println("日期间隔: " + period.getDays() + " 天");

        // 时间间隔
        LocalDateTime startTime = LocalDateTime.of(2024, 12, 9, 10, 0, 0);
        LocalDateTime endTime = LocalDateTime.of(2024, 12, 9, 14, 30, 0);

        Duration duration = Duration.between(startTime, endTime);
        System.out.println("时间间隔: " + duration.toHours() + " 小时 " + duration.toMinutesPart() + " 分钟");
    }
}

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.Locale;

public class InternationalDateFormatting {
    public static void main(String[] args) {
        LocalDateTime now = LocalDateTime.now();

        // 英文格式
        DateTimeFormatter formatterUS = DateTimeFormatter.ofPattern("EEEE, MMMM d, yyyy", Locale.US);
        System.out.println("美国格式: " + now.format(formatterUS));

        // 中文格式
        DateTimeFormatter formatterCN = DateTimeFormatter.ofPattern("yyyy年MM月dd日 EEEE", Locale.CHINA);
        System.out.println("中国格式: " + now.format(formatterCN));
    }
}

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

import java.time.LocalDate;

public class ActiveUserAnalysis {
    public static void main(String[] args) {
        LocalDate today = LocalDate.now();
        LocalDate oneWeekAgo = today.minusDays(7);

        System.out.println("统计范围起始日期: " + oneWeekAgo);
        System.out.println("统计范围结束日期: " + today);
        
        // 示例 SQL 查询
        String sqlQuery = String.format("SELECT * FROM users WHERE last_active BETWEEN '%s' AND '%s';",
                                         oneWeekAgo, today);
        System.out.println("生成的 SQL 查询: " + sqlQuery);
    }
}

在这里插入图片描述

import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;

public class DateParsingAndFormatting {
    public static void main(String[] args) {
        String input = "20241209153000"; // 输入格式为 yyyyMMddHHmmss

        // 解析输入字符串
        DateTimeFormatter inputFormatter = DateTimeFormatter.ofPattern("yyyyMMddHHmmss");
        LocalDateTime dateTime = LocalDateTime.parse(input, inputFormatter);

        // 格式化为目标格式
        DateTimeFormatter outputFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
        String formattedDate = dateTime.format(outputFormatter);

        System.out.println("原始字符串: " + input);
        System.out.println("解析后的时间: " + dateTime);
        System.out.println("格式化后的时间: " + formattedDate);
    }
}

在这里插入图片描述

import java.time.LocalDateTime;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;

public class TimerExample {
    public static void main(String[] args) {
        ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1);

        // 开始时间
        LocalDateTime startTime = LocalDateTime.now();

        // 定时任务
        scheduler.scheduleAtFixedRate(() -> {
            LocalDateTime now = LocalDateTime.now();
            System.out.println("当前时间: " + now);

            // 检查是否运行满 1 分钟
            if (now.isAfter(startTime.plusMinutes(1))) {
                System.out.println("定时任务结束");
                scheduler.shutdown();
            }
        }, 0, 10, TimeUnit.SECONDS);
    }
}

在这里插入图片描述
在这里插入图片描述

import java.time.*;
import java.time.format.DateTimeFormatter;
import java.util.Locale;

public class DateTimeUtils {

    // 常用日期时间格式
    public static final String DEFAULT_FORMAT = "yyyy-MM-dd HH:mm:ss";
    public static final String DATE_FORMAT = "yyyy-MM-dd";
    public static final String TIME_FORMAT = "HH:mm:ss";

    private DateTimeUtils() {
        // 私有构造方法防止实例化
    }

    /**
     * 获取当前时间字符串
     * @return 当前时间,格式为 yyyy-MM-dd HH:mm:ss
     */
    public static String getCurrentTime() {
        return LocalDateTime.now().format(DateTimeFormatter.ofPattern(DEFAULT_FORMAT));
    }

    /**
     * 按指定格式获取当前时间字符串
     * @param format 日期格式
     * @return 当前时间
     */
    public static String getCurrentTime(String format) {
        return LocalDateTime.now().format(DateTimeFormatter.ofPattern(format));
    }

    /**
     * 解析字符串为 LocalDateTime
     * @param dateStr 日期字符串
     * @param format 日期格式
     * @return LocalDateTime 对象
     */
    public static LocalDateTime parse(String dateStr, String format) {
        DateTimeFormatter formatter = DateTimeFormatter.ofPattern(format);
        return LocalDateTime.parse(dateStr, formatter);
    }

    /**
     * 格式化 LocalDateTime 为字符串
     * @param dateTime LocalDateTime 对象
     * @param format 日期格式
     * @return 格式化后的字符串
     */
    public static String format(LocalDateTime dateTime, String format) {
        DateTimeFormatter formatter = DateTimeFormatter.ofPattern(format);
        return dateTime.format(formatter);
    }

    /**
     * 计算两个日期之间的天数
     * @param start 开始日期
     * @param end 结束日期
     * @return 天数
     */
    public static long daysBetween(LocalDate start, LocalDate end) {
        return Duration.between(start.atStartOfDay(), end.atStartOfDay()).toDays();
    }

    /**
     * 获取指定时间加上指定天数后的时间
     * @param dateTime 原时间
     * @param days 增加的天数
     * @return 新时间
     */
    public static LocalDateTime addDays(LocalDateTime dateTime, int days) {
        return dateTime.plusDays(days);
    }

    /**
     * 转换时间为目标时区
     * @param dateTime LocalDateTime 对象
     * @param sourceZoneId 源时区
     * @param targetZoneId 目标时区
     * @return 转换后的 ZonedDateTime
     */
    public static ZonedDateTime convertZone(LocalDateTime dateTime, String sourceZoneId, String targetZoneId) {
        ZoneId sourceZone = ZoneId.of(sourceZoneId);
        ZoneId targetZone = ZoneId.of(targetZoneId);
        ZonedDateTime zonedDateTime = dateTime.atZone(sourceZone);
        return zonedDateTime.withZoneSameInstant(targetZone);
    }

    /**
     * 获取当前时间戳(秒)
     * @return 时间戳
     */
    public static long getCurrentTimestamp() {
        return Instant.now().getEpochSecond();
    }

    /**
     * 将时间戳转换为 LocalDateTime
     * @param timestamp 时间戳(秒)
     * @return LocalDateTime 对象
     */
    public static LocalDateTime timestampToLocalDateTime(long timestamp) {
        return LocalDateTime.ofInstant(Instant.ofEpochSecond(timestamp), ZoneId.systemDefault());
    }
}

在这里插入图片描述

public class DateTimeUtilsTest {
    public static void main(String[] args) {
        // 获取当前时间
        System.out.println("当前时间: " + DateTimeUtils.getCurrentTime());

        // 自定义格式化当前时间
        System.out.println("当前时间(自定义格式): " + DateTimeUtils.getCurrentTime("yyyy/MM/dd HH:mm"));

        // 解析时间字符串
        String dateStr = "2024-12-09 10:30:00";
        LocalDateTime parsedTime = DateTimeUtils.parse(dateStr, "yyyy-MM-dd HH:mm:ss");
        System.out.println("解析时间: " + parsedTime);

        // 格式化 LocalDateTime
        String formattedTime = DateTimeUtils.format(parsedTime, "MM/dd/yyyy HH:mm");
        System.out.println("格式化时间: " + formattedTime);

        // 计算日期差
        LocalDate startDate = LocalDate.of(2024, 12, 1);
        LocalDate endDate = LocalDate.of(2024, 12, 9);
        System.out.println("日期差: " + DateTimeUtils.daysBetween(startDate, endDate) + " 天");

        // 时间加减
        LocalDateTime now = LocalDateTime.now();
        LocalDateTime newTime = DateTimeUtils.addDays(now, 5);
        System.out.println("当前时间加 5 天: " + newTime);

        // 时区转换
        LocalDateTime utcNow = LocalDateTime.now(ZoneId.of("UTC"));
        ZonedDateTime nyTime = DateTimeUtils.convertZone(utcNow, "UTC", "America/New_York");
        System.out.println("UTC 转纽约时间: " + nyTime);

        // 获取当前时间戳
        long timestamp = DateTimeUtils.getCurrentTimestamp();
        System.out.println("当前时间戳: " + timestamp);

        // 时间戳转 LocalDateTime
        LocalDateTime fromTimestamp = DateTimeUtils.timestampToLocalDateTime(timestamp);
        System.out.println("时间戳转时间: " + fromTimestamp);
    }
}

在这里插入图片描述
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值