Java日期时间

简介: 本文以代码样例介绍Java日期和时间相关API的用法。

Date

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

public class DateDemo {

    public static void main(String[] args) {
        Date date = new Date();
        // 日期字符串格式
        SimpleDateFormat ft = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
        System.out.println("当前时间为: " + ft.format(date));
        // 日期属性
        // b的使用,月份简称
        String str = String.format(Locale.US, "英文月份简称:%tb", date);
        System.out.println(str);
        System.out.printf("本地月份简称:%tb%n", date);
        // B的使用,月份全称
        str = String.format(Locale.US, "英文月份全称:%tB", date);
        System.out.println(str);
        System.out.printf("本地月份全称:%tB%n", date);
        // a的使用,星期简称
        str = String.format(Locale.US, "英文星期的简称:%ta", date);
        System.out.println(str);
        // A的使用,星期全称
        System.out.printf("本地星期的简称:%tA%n", date);
        // C的使用,年前两位
        System.out.printf("年的前两位数字(不足两位前面补0):%tC%n", date);
        // y的使用,年后两位
        System.out.printf("年的后两位数字(不足两位前面补0):%ty%n", date);
        // j的使用,一年的天数
        System.out.printf("一年中的天数(即年的第几天):%tj%n", date);
        // m的使用,月份
        System.out.printf("两位数字的月份(不足两位前面补0):%tm%n", date);
        // d的使用,日(二位,不够补零)
        System.out.printf("两位数字的日(不足两位前面补0):%td%n", date);
        // e的使用,日(一位不补零)
        System.out.printf("月份的日(前面不补0):%te", date);
        // 将日期字符串解析为时间
        String input = args.length == 0 ? "2011-11-11 11:11:11" : args[0];
        System.out.print(input + " Parses as ");
        Date t;
        try {
            t = ft.parse(input);
            System.out.println(t);
        } catch (ParseException e) {
            e.printStackTrace();
        }
    }

}

Calendar

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

public class CalendarDemo {

    public static void main(String[] args) {
        // 规定输出日期格式
        SimpleDateFormat ft = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
        // 创建Calendar对象
        Calendar c1 = Calendar.getInstance();
        System.out.println(ft.format(c1.getTime()));
        // 获得年
        int year = c1.get(Calendar.YEAR);
        System.out.println(year);
        // 获得月,1月为0
        int month = c1.get(Calendar.MONTH) + 1;
        System.out.println(month);
        // 获得日
        int day = c1.get(Calendar.DATE);
        System.out.println(day);
        // 获得时
        int hour = c1.get(Calendar.HOUR_OF_DAY);
        System.out.println(hour);
        // 获得分
        int minute = c1.get(Calendar.MINUTE);
        System.out.println(minute);
        // 获得秒
        int second = c1.get(Calendar.SECOND);
        System.out.println(second);
        // 获得星期几(注意(这个与Date类是不同的):1代表星期日、2代表星期1、3代表星期二,以此类推)
        int weekday = c1.get(Calendar.DAY_OF_WEEK);
        System.out.println(weekday);
        // 通过Calendar生成Date
        Date date = c1.getTime();
        // 根据date调整Calendar
        Calendar c2 = Calendar.getInstance();
        c2.setTime(date);
        System.out.println(ft.format(c2.getTime()));
        // 手动设置时间
        c2.set(2022, Calendar.AUGUST, 31);
        System.out.println(ft.format(c2.getTime()));
        // 测试add()功能
        c2.add(Calendar.MONTH, 6);
        System.out.println(ft.format(c2.getTime()));
        // 测试roll()功能
        c2.set(2022, Calendar.AUGUST, 31);
        c2.roll(Calendar.MONTH, 6);
        System.out.println(ft.format(c2.getTime()));
        // 设置MONTH为13
        c2.set(Calendar.MONTH, 13);
        System.out.println(ft.format(c2.getTime()));
        // 关闭容错性
        c2.setLenient(false);
        try {
            c2.set(Calendar.MONTH, 13);
            System.out.println(ft.format(c2.getTime()));
        } catch (IllegalArgumentException e) {
            System.out.println("增加月份错误");
        }
        // 开启容错性
        c2.setLenient(true);
    }

}

java.time

Clock

import java.time.Clock;
import java.time.ZoneId;

/**
 * Clock用于获取指定时区的当前日期和时间
 */
public class ClockDemo {

    public static void main(String[] args) {
        ZoneId zoneId = ZoneId.systemDefault();
        System.out.println("ZoneId: " + zoneId);
        Clock clock = Clock.system(zoneId);
        System.out.println(clock.instant());
        System.out.println(clock.millis());
        System.out.println(System.currentTimeMillis());
    }

}

Duration

import java.time.Clock;
import java.time.Duration;

/**
 * Duration表示持续时间,代表一段时间
 */
public class DurationDemo {

    public static void main(String[] args) {
        Duration duration = Duration.ofSeconds(6000);
        System.out.println(duration.toMinutes());
        System.out.println(duration.toHours());
        System.out.println(duration.toDays());
        Clock clock = Clock.offset(Clock.systemUTC(), duration);
        System.out.println(clock.instant());
    }

}

Instant

import java.time.Duration;
import java.time.Instant;

/**
 * Instant代表某一个具体的时刻,可以精确到纳秒
 */
public class InstantDemo {

    public static void main(String[] args) {
        Instant instant = Instant.now();
        System.out.println(instant);
        instant = instant.plusSeconds(6000);
        System.out.println(instant);
        instant = Instant.parse("2022-08-01T09:08:07.342Z");
        System.out.println(instant);
        instant = instant.plus(Duration.ofHours(3).plusMinutes(20));
        System.out.println(instant);
        instant = instant.minus(Duration.ofDays(4));
        System.out.println(instant);
    }

}

LocalDate

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

/**
 * LocalDate表示不带时区的日期
 */
public class LocalDateDemo {

    public static void main(String[] args) {
        LocalDate localDate = LocalDate.now();
        System.out.println(localDate);
        // 获取2021年第211天
        localDate = LocalDate.ofYearDay(2021, 211);
        System.out.println(localDate);
        // 2022-08-02
        localDate = LocalDate.of(2022, Month.AUGUST, 2);
        System.out.println(localDate);
    }

}
import java.time.LocalDateTime;

/**
 * LocalDateTime代表不带时区的日期时间
 */
public class LocalDateTimeDemo {

    public static void main(String[] args) {
        LocalDateTime localDateTime = LocalDateTime.now();
        System.out.println(localDateTime);
        localDateTime = localDateTime.plusDays(3).plusHours(25).plusMinutes(33);
        System.out.println(localDateTime);
    }

}

LocalTime

import java.time.LocalTime;

/**
 * LocalTime代表不带时区的时间
 */
public class LocalTimeDemo {

    public static void main(String[] args) {
        LocalTime localTime = LocalTime.now();
        System.out.println(localTime);
        localTime = LocalTime.of(23, 23);
        System.out.println(localTime);
        localTime = LocalTime.ofSecondOfDay(66666);
        System.out.println(localTime);
    }

}

Year、Month、Day

import java.time.Month;
import java.time.MonthDay;
import java.time.Year;
import java.time.YearMonth;

/**
 * Year代表年
 * YearMonth代表年月
 * MonthDay代表月日
 * Month是一个枚举类
 * DayOfWeek也是枚举类
 */
public class YearMonthDayDemo {

    public static void main(String[] args) {
        Year year = Year.now();
        System.out.println(year);
        year = year.plusYears(3);
        System.out.println(year);
        YearMonth yearMonth = year.atMonth(Month.AUGUST);
        System.out.println(yearMonth);
        yearMonth = yearMonth.minusYears(2).plusMonths(1);
        System.out.println(yearMonth);
        MonthDay monthDay = MonthDay.now();
        System.out.println(monthDay);
        monthDay = monthDay.with(Month.APRIL).withDayOfMonth(22);
        System.out.println(monthDay);
    }

}

ZoneOffset

import java.time.Instant;
import java.time.ZoneId;
import java.time.ZoneOffset;
import java.util.List;
import java.util.stream.Collectors;

public class ZoneOffsetDemo {

    public static void main(String[] args) {
        ZoneOffset plusTwo = ZoneOffset.ofHours(2);
        List<String> zonesWithPlusTwo =
                ZoneId.getAvailableZoneIds()
                        .stream()
                        .filter(zoneId -> ZoneId.of(zoneId)
                                .getRules()
                                .getOffset(Instant.now())
                                .equals(plusTwo))
                        .sorted()
                        .collect(Collectors.toList());
        zonesWithPlusTwo.forEach(System.out::println);
    }

}
相关文章
|
4月前
|
Java
Java基础之日期和时间
Java基础之日期和时间
34 1
|
5月前
|
安全 Java 程序员
Java8实战-新的日期和时间API
Java8实战-新的日期和时间API
43 3
|
1月前
|
Java API
Java的日期类都是怎么用的
【10月更文挑战第1天】本文介绍了 Java 中处理日期和时间的三个主要类:`java.util.Date`、`java.util.Calendar` 和 `java.time` 包下的新 API。`Date` 类用于表示精确到毫秒的瞬间,可通过时间戳创建或获取当前日期;`Calendar` 抽象类提供丰富的日期操作方法,如获取年月日及时区转换;`java.time` 包中的 `LocalDate`、`LocalTime`、`LocalDateTime` 和 `ZonedDateTime` 等类则提供了更为现代和灵活的日期时间处理方式,支持时区和复杂的时间计算。
34 14
|
2月前
|
Java 数据库
java小工具util系列1:日期和字符串转换工具
java小工具util系列1:日期和字符串转换工具
49 3
|
2月前
|
安全 Java API
时间日期API(Date,SimpleDateFormat,Calendar)+java8新增日期API (LocalTime,LocalDate,LocalDateTime)
这篇文章介绍了Java中处理日期和时间的API,包括旧的日期API(Date、SimpleDateFormat、Calendar)和Java 8引入的新日期API(LocalTime、LocalDate、LocalDateTime)。文章详细解释了这些类/接口的方法和用途,并通过代码示例展示了如何使用它们。此外,还讨论了新旧API的区别,新API的不可变性和线程安全性,以及它们提供的操作日期时间的灵活性和简洁性。
|
3月前
|
前端开发 JavaScript Java
【前端学java】java中的日期操作(13)
【8月更文挑战第10天】java中的日期操作
21 2
【前端学java】java中的日期操作(13)
|
3月前
|
Java
比较两个日期是否相等Java
这篇文章提供了Java中比较两个日期是否相等的两种方法:使用`Calendar`类和`SimpleDateFormat`类来确定两个日期是否为同一天,并附有详细的代码示例和测试结果。
|
5月前
|
Java 测试技术 API
滚雪球学Java(52):一步一步教你使用Java Calendar类进行日期计算
【6月更文挑战第6天】🏆本文收录于「滚雪球学Java」专栏,专业攻坚指数级提升,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收藏&&订阅!持续更新中,up!up!up!!
44 3
滚雪球学Java(52):一步一步教你使用Java Calendar类进行日期计算
|
4月前
|
安全 Java API
Java基础之日期和时间
【7月更文挑战第3天】 Java 8之前的日期时间处理涉及Date、Calendar、SimpleDateFormat及TimeZone类。Date是不可变对象,但不推荐直接调整时间。Calendar提供日期计算,而SimpleDateFormat用于格式化。Date和Calendar非线程安全,处理时区需用TimeZone。Java 8引入了java.time包,包含Instant、LocalDate等类,提供更现代、线程安全和高效的API,例如Instant用于时间戳,LocalDateTime表示日期和时间,ZonedDateTime处理时区。下节将探讨Java 8的新API。
102 2
|
4月前
|
Java API
Java基础之日期和时间
【7月更文挑战第4天】 Java日期时间API概览:Java 8之前,Date表示不可变时间点,Calendar用于计算,SimpleDateFormat处理格式化。Date的setXXX方法不推荐,Calendar支持加减操作。时区处理用TimeZone,Time仅处理时间(不含日期)。Java 8引入java.time包,提供Instant、LocalDate等线程安全类,改进了性能和易用性,支持时区和更复杂操作。后续将探讨Java 8的新特性!
44 1