时间

Calendar

  1. Calendar 代表了系统当前时间的日历对象,可以单独修改、获取时间中的年月日
  2. 细节:Calendar 是一个抽象类,不能直接创建对象
import java.util.Calendar;

// 获取当前时间的日历对象

public static Calendar getInstance();
方法名 说明
public final Date getTime() 获取日期对象
public final setTime() 给日历设置日期对象
public long getTimeInMillis() 拿到时间毫秒值
public void setTimeInMillis(long millis) 给日历设置时间毫秒值
public int get(int field) 取日历中的某个字段信息
public void set(int field,int value) 修改日历中的某个字段信息
public void add(int field,int amount) 为某个字段增加/减少指定的值
  1. Calendar 是一个抽象类,不能直接new,而是通过一个静态方法获取到子类对象
  2. 会把时间年月日时分秒星期放到一个数组中
  3. 月份:范围0-11 如果获取出来的0 实际上是1月,所以需要+1
  4. 星期:范围1-7 星期日是 1
import java.util.Calendar;

public class Main {
    public static void main(String[] args) {
        // 获取日历对象
        Calendar cl = Calendar.getInstance();
        // cl 会把时间年月日时分秒星期放到一个数组中
        System.out.println(cl);
        // java.util.GregorianCalendar[time=1741486459073,areFieldsSet=true,areAllFieldsSet=true,lenient=true,zone=sun.util.calendar.ZoneInfo[id="Asia/Shanghai",offset=28800000,dstSavings=0,useDaylight=false,transitions=31,lastRule=null],firstDayOfWeek=2,minimalDaysInFirstWeek=1,ERA=1,YEAR=2025,MONTH=2,WEEK_OF_YEAR=10,WEEK_OF_MONTH=2,DAY_OF_MONTH=9,DAY_OF_YEAR=68,DAY_OF_WEEK=1,DAY_OF_WEEK_IN_MONTH=2,AM_PM=0,HOUR=10,HOUR_OF_DAY=10,MINUTE=14,SECOND=19,MILLISECOND=73,ZONE_OFFSET=28800000,DST_OFFSET=0]
    }
}
import java.util.Calendar;

public class Main {
    public static void main(String[] args) {
        // 获取日历对象
        // Calendar 是一个抽象类,不能直接new,而是通过一个静态方法获取到子类对象
        Calendar cl = Calendar.getInstance();
        // year 年  month 月 day 日
        // Hour 时 minute 分 second 秒 millisecond 毫秒 nanosecond 纳秒
        // week 星期
        cl.set(Calendar.YEAR, 2021); // 修改年 2021年
        cl.set(Calendar.MONTH, 1); // 修改月2月
        cl.set(Calendar.DAY_OF_MONTH, 28); // 修改为31日,如果没有或叠加至3月

        cl.add(Calendar.YEAR, 1); // 增加1年
        cl.add(Calendar.MONTH, 1); // 增加1个月

        int year = cl.get(Calendar.YEAR); // 年
        int month = cl.get(Calendar.MONTH) + 1;// 月
        int day = cl.get(Calendar.DAY_OF_MONTH); //日
        int hour = cl.get(Calendar.HOUR_OF_DAY); //时
        int minute = cl.get(Calendar.MINUTE); //分
        int second = cl.get(Calendar.SECOND);// 秒
        int millisecond = cl.get(Calendar.MILLISECOND);// 毫秒
        int week = cl.get(Calendar.DAY_OF_WEEK) - 1;//星期
        System.out.println(year + "-" + month + "-" + day + "-" + hour + "-" + minute + "-" + second + "-" + millisecond + getWeek(week));
    }

    // 星期是从1-7 1是周日
    public static String getWeek(int week) {
        String[] arr = {"", "星期天", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六"};
        return arr[week];
    }
}

Date类

ZoneId

时区

import java.time.ZoneId;
import java.util.Set;

public class ZoneIdDemo {
    public static void main(String[] args) {

        // 获取java中支持的所有时区
        Set<String> availableZoneIds = ZoneId.getAvailableZoneIds();
        for (String zoneIdStr : availableZoneIds) {
            System.out.println(zoneIdStr);
        }

        // 获取系统默认时区
        ZoneId zoneId1 = ZoneId.systemDefault(); // Asia/Shanghai
        System.out.println(zoneId1);

        // 获取一个指定的时区
        ZoneId zoneId2 = ZoneId.of("Asia/Shanghai");
        System.out.println(zoneId2);

    }
}



Instant

时间戳

import java.time.Instant;
import java.time.ZoneId;
import java.time.ZonedDateTime;

public class InstantDemo {
    public static void main(String[] args) {
        // 获取标准时间
        Instant instant = Instant.now();
//        System.out.println(instant);
//
        // 根据秒/毫秒/纳秒获取Instant对象
        Instant instant1 = Instant.ofEpochMilli(0L); // 毫秒值 1970-01-01T00:00:00Z
        Instant instant2 = Instant.ofEpochSecond(1L); // 秒 1970-01-01T00:00:01Z

        //
        Instant instant3 = Instant.ofEpochSecond(1L, 1000000000); // 1970-01-01T00:00:02Z

        System.out.println(instant1);
        System.out.println(instant2);
        System.out.println(instant3);


        // 指定时区 获取时间
        ZonedDateTime time = Instant.now().atZone(ZoneId.of("Asia/Shanghai"));
        System.out.println(time); // 2025-03-09T18:36:40.110903500+08:00[Asia/Shanghai]

        // 用于时间的判断
        // isBefore:判断调用者代表的时间是否在参数表示时间的前面
        Instant instant4 = Instant.ofEpochMilli(0L);
        Instant instant5 = Instant.ofEpochMilli(1000L);
        boolean before = instant4.isBefore(instant5); // true
        System.out.println(before);
        // isAfter : 判断调用者代表的时间是否在参数表示的后面
        boolean before1 = instant4.isAfter(instant5);
        System.out.println(before1);


        // 减少时间系列的方法 minusXXX
        Instant instant6 = Instant.ofEpochMilli(3000L);
        System.out.println(instant6); // 1970-01-01T00:00:03Z
        // minusXXX
        Instant instant7 = instant6.minusSeconds(1); // 减少毫秒,其他同理
        System.out.println(instant7); // 1970-01-01T00:00:02Z

        // 增加时间系列的方法 plusXXX
        Instant instant8 = Instant.ofEpochMilli(3000L);
        System.out.println(instant6); // 1970-01-01T00:00:03Z
        // plusXXX
        Instant instant9 = instant6.plusSeconds(1); // 增加毫秒,其他同理
        System.out.println(instant7); // 1970-01-01T00:00:02Z
    }
}

ZoneDateTime

带时区的时间

import java.time.Instant;
import java.time.ZoneId;
import java.time.ZonedDateTime;

public class ZoneDateTimeDemo {
    public static void main(String[] args) {
        // 带当前时间对象(带时区)
        ZonedDateTime now = ZonedDateTime.now();
        System.out.println(now); // 2025-03-09T23:00:46.842758100+08:00[Asia/Shanghai]

        // 获取指定的时间对象(带时区)
        ZonedDateTime time = ZonedDateTime.of(2021, 5, 18, 8, 0, 0, 0, ZoneId.of("Asia/Shanghai"));
        System.out.println(time); // 2021-05-18T08:00+08:00[Asia/Shanghai]

        // 通过Instant + 时区的方式获取指定获取时间对象
        Instant instant = Instant.ofEpochMilli(3000L);
        ZoneId zone = ZoneId.of("Asia/Shanghai");
        ZonedDateTime time1 = ZonedDateTime.ofInstant(instant, zone); // 时区
        System.out.println(time1); // 1970-01-01T08:00:03+08:00[Asia/Shanghai]

        // 修改时间系列的方法
        ZonedDateTime zonedDateTime = time.withYear(2025);
        System.out.println(zonedDateTime); // 2025-05-18T08:00+08:00[Asia/Shanghai]

        // 减少时间
        ZonedDateTime zonedDateTime1 = zonedDateTime.minusYears(4);
        System.out.println(zonedDateTime1); // 2021-05-18T08:00+08:00[Asia/Shanghai]

        // 增加时间
        ZonedDateTime zonedDateTime2 = zonedDateTime1.plusYears(4);
        System.out.println(zonedDateTime2); // 2025-05-18T08:00+08:00[Asia/Shanghai]
    }
}

日期格式化类

DateTimeFormatter

用于时间的格式化和解析

import java.time.Instant;
import java.time.ZoneId;
import java.time.ZonedDateTime;
import java.time.format.DateTimeFormatter;

public class DateTimeFormatterDemo {
    public static void main(String[] args) {
        // 定义时间
        ZonedDateTime time = Instant.now().atZone(ZoneId.of("Asia/Shanghai"));
        // 解析/格式化器
        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss EE a");
        // 格式化
        System.out.println(formatter.format(time)); // 2025-03-09 23:16:02 周日 下午
    }
}

日历类

LocalDate

年、月、日

import java.time.DayOfWeek;
import java.time.LocalDate;
import java.time.Month;

public class LocalDateDemo {
    public static void main(String[] args) {
        LocalDate date = LocalDate.now();
        System.out.println(date); // 2025-03-09
        // 获取年
        int getYear = date.getYear(); // 2025
        System.out.println(getYear);
        // 获取月
        Month getMonth = date.getMonth(); // 3
        System.out.println(getMonth);
        // 获取日
        int getDay = date.getDayOfMonth();
        System.out.println(getDay); // 9
        // 获取星期
        DayOfWeek dayOfWeek = date.getDayOfWeek(); // SUNDAY
        System.out.println(dayOfWeek);


        LocalDate date1 = LocalDate.of(2021, 5, 18);
        System.out.println(date1); // 2021-05-18
        // 修改 withXXX
        LocalDate localDate = date1.withYear(2025);
        System.out.println(localDate); // 2025-05-18
        // 增加 plusXXX
        LocalDate localDate1 = localDate.plusDays(1);
        System.out.println(localDate1); // 2025-05-19
        // 减少 minusXXX
        LocalDate localDate2 = localDate1.minusDays(1);
        System.out.println(localDate2); // 2025-05-18
    }
}


LocalTime

时、分、秒

LocalDateTime

年、月、日、时、分、秒

工具类

Duration

时间间隔(秒,纳秒)

Period

时间间隔(年、月、日)

ChronoUnit

时间间隔(所有单位)

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。