Java的日期类都是怎么用的

简介: 【10月更文挑战第1天】本文介绍了 Java 中处理日期和时间的三个主要类:`java.util.Date`、`java.util.Calendar` 和 `java.time` 包下的新 API。`Date` 类用于表示精确到毫秒的瞬间,可通过时间戳创建或获取当前日期;`Calendar` 抽象类提供丰富的日期操作方法,如获取年月日及时区转换;`java.time` 包中的 `LocalDate`、`LocalTime`、`LocalDateTime` 和 `ZonedDateTime` 等类则提供了更为现代和灵活的日期时间处理方式,支持时区和复杂的时间计算。
  1. java.util.Date
  • 基本介绍
  • Date类是 Java 中最早用于处理日期和时间的类。它代表了一个特定的瞬间,精确到毫秒。例如:


import java.util.Date;
public class DateExample {
    public static void main(String[] args) {
        Date now = new Date();
        System.out.println(now); 
    }
}


  • 上述代码创建了一个Date对象,表示当前日期和时间。当打印这个对象时,会按照默认的日期时间格式输出,如Wed Aug 09 15:08:44 CST 2023
  • 时间戳相关操作
  • Date类可以方便地获取时间戳(从 1970 年 1 月 1 日 00:00:00 UTC 到指定时间所经过的毫秒数)。例如:


import java.util.Date;
public class DateTimestampExample {
    public static void main(String[] args) {
        Date now = new Date();
        long timestamp = now.getTime();
        System.out.println("时间戳: " + timestamp);
    }
}


  • 也可以通过时间戳来创建Date对象:


import java.util.Date;
public class DateFromTimestampExample {
    public static void main(String[] args) {
        long timestamp = 1691574989000L;
        Date date = new Date(timestamp);
        System.out.println(date);
    }
}


  1. java.util.Calendar类(抽象类)
  • 基本介绍
  • Calendar类是一个抽象类,用于在 Java 中进行日期和时间的操作,它比Date类提供了更丰富的日期操作方法,如获取年、月、日、时、分、秒等。它通过getInstance方法获取实例,例如:


import java.util.Calendar;
public class CalendarExample {
    public static void main(String[] args) {
        Calendar calendar = Calendar.getInstance();
        int year = calendar.get(Calendar.YEAR);
        int month = calendar.get(Calendar.MONTH)+1; // 注意月份是从0开始计数的
        int day = calendar.get(Calendar.DAY_OF_MONTH);
        System.out.println("当前日期: " + year + "-" + month + "-" + day);
    }
}


  • 日期计算与设置
  • 可以使用Calendar类进行日期的计算和设置。例如,要将日期增加一天:


import java.util.Calendar;
public class CalendarAddExample {
    public static void main(String[] args) {
        Calendar calendar = Calendar.getInstance();
        System.out.println("当前日期: ");
        printDate(calendar);
        calendar.add(Calendar.DAY_OF_MONTH, 1);
        System.out.println("增加一天后的日期: ");
        printDate(calendar);
    }
    private static void printDate(Calendar calendar) {
        int year = calendar.get(Calendar.YEAR);
        int month = calendar.get(Calendar.MONTH)+1;
        int day = calendar.get(Calendar.DAY_OF_MONTH);
        System.out.println(year + "-" + month + "-" + day);
    }
}


  • 也可以设置特定的日期和时间,如设置为 2024 年 1 月 1 日:


import java.util.Calendar;
public class CalendarSetExample {
    public static void main(String[] args) {
        Calendar calendar = Calendar.getInstance();
        calendar.set(Calendar.YEAR, 2024);
        calendar.set(Calendar.MONTH, 0); 
        calendar.set(Calendar.DAY_OF_MONTH, 1);
        printDate(calendar);
    }
    private static void printDate(Calendar calendar) {
        int year = calendar.get(Calendar.YEAR);
        int month = calendar.get(Calendar.MONTH)+1;
        int day = calendar.get(Calendar.DAY_OF_MONTH);
        System.out.println(year + "-" + month + "-" + day);
    }
}


  1. java.time包下的日期时间 API(Java 8 引入)
  • LocalDateLocalTimeLocalDateTime
  • 基本介绍
  • LocalDate用于表示日期(年、月、日),LocalTime用于表示时间(时、分、秒、纳秒),LocalDateTime用于表示日期和时间。例如:


import java.time.LocalDate;
import java.time.LocalTime;
import java.time.LocalDateTime;
public class Java8DateTimeExample {
    public static void main(String[] args) {
        LocalDate localDate = LocalDate.now();
        System.out.println("当前日期: " + localDate);
        LocalTime localTime = LocalTime.now();
        System.out.println("当前时间: " + localTime);
        LocalDateTime localDateTime = LocalDateTime.now();
        System.out.println("当前日期和时间: " + localDateTime);
    }
}


  • 日期时间操作
  • 这些类提供了丰富的方法来操作日期和时间。例如,获取某个日期的下一周日期:


import java.time.LocalDate;
public class LocalDatePlusExample {
    public static void main(String[] args) {
        LocalDate localDate = LocalDate.now();
        LocalDate nextWeekDate = localDate.plusWeeks(1);
        System.out.println("下一周日期: " + nextWeekDate);
    }
}


  • 或者获取两个日期之间的间隔天数:


import java.time.LocalDate;
import java.time.temporal.ChronoUnit;
public class DateDiffExample {
    public static void main(String[] args) {
        LocalDate startDate = LocalDate.of(2023, 1, 1);
        LocalDate endDate = LocalDate.of(2023, 1, 10);
        long daysBetween = ChronoUnit.DAYS.between(startDate, endDate);
        System.out.println("间隔天数: " + daysBetween);
    }
}


  • ZonedDateTimeZoneId
  • 基本介绍
  • ZonedDateTime用于表示带时区的日期和时间,ZoneId用于表示时区。例如,获取不同时区的当前日期和时间:


import java.time.ZoneId;
import java.time.ZonedDateTime;
public class ZonedDateTimeExample {
    public static void main(String[] args) {
        ZoneId zoneIdNewYork = ZoneId.of("America/New_York");
        ZonedDateTime zonedDateTimeNewYork = ZonedDateTime.now(zoneIdNewYork);
        System.out.println("纽约当前日期和时间: " + zonedDateTimeNewYork);
    }
}


  • 时区转换操作
  • 可以使用这些类进行时区转换。例如,将东京时间转换为伦敦时间:


import java.time.ZoneId;
import java.time.ZonedDateTime;
public class TimeZoneConversionExample {
    public static void main(String[] args) {
        ZoneId zoneIdTokyo = ZoneId.of("Asia/Tokyo");
        ZoneId zoneIdLondon = ZoneId.of("Europe/London");
        ZonedDateTime zonedDateTimeTokyo = ZonedDateTime.now(zoneIdTokyo);
        ZonedDateTime zonedDateTimeLondon = zonedDateTimeTokyo.withZoneSameInstant(zoneIdLondon);
        System.out.println("东京时间转换为伦敦时间: " + zonedDateTimeLondon);
    }
}
相关文章
|
17天前
|
Java Linux
java基础(3)安装好JDK后使用javac.exe编译java文件、java.exe运行编译好的类
本文介绍了如何在安装JDK后使用`javac.exe`编译Java文件,以及使用`java.exe`运行编译好的类文件。涵盖了JDK的安装、环境变量配置、编写Java程序、使用命令行编译和运行程序的步骤,并提供了解决中文乱码的方法。
38 1
|
17天前
|
Java 索引
java基础(13)String类
本文介绍了Java中String类的多种操作方法,包括字符串拼接、获取长度、去除空格、替换、截取、分割、比较和查找字符等。
29 0
java基础(13)String类
|
6天前
|
Java
Java Object 类详解
在 Java 中,`Object` 类是所有类的根类,每个 Java 类都直接或间接继承自 `Object`。作为所有类的超类,`Object` 定义了若干基本方法,如 `equals`、`hashCode`、`toString` 等,这些方法在所有对象中均可使用。通过重写这些方法,可以实现基于内容的比较、生成有意义的字符串表示以及确保哈希码的一致性。此外,`Object` 还提供了 `clone`、`getClass`、`notify`、`notifyAll` 和 `wait` 等方法,支持对象克隆、反射机制及线程同步。理解和重写这些方法有助于提升 Java 代码的可读性和可维护性。
|
1天前
|
Java
颠覆认知:一向主张可扩展性的Java,为何要推出封闭类?
本文介绍了Java的Sealed Classes(封闭类)功能,探讨了为何Java在强调可扩展性的同时引入这一特性。文章基于JDK 17.0.5,详细解释了Sealed Classes的概念及其作用。通过对比final类和package-private类,阐述了封闭类在提高安全性和控制扩展性方面的优势。最后,通过具体示例展示了如何使用sealed关键字以及相关语法。了解这一新特性有助于我们更好地把握Java未来的发展趋势。
13 2
|
27天前
|
存储 安全 Java
Java——String类详解
String 是 Java 中的一个类,用于表示字符串,属于引用数据类型。字符串可以通过多种方式定义,如直接赋值、创建对象、传入 char 或 byte 类型数组。直接赋值会将字符串存储在串池中,复用相同的字符串以节省内存。String 类提供了丰富的方法,如比较(equals() 和 compareTo())、查找(charAt() 和 indexOf())、转换(valueOf() 和 format())、拆分(split())和截取(substring())。此外,还介绍了 StringBuilder 和 StringJoiner 类,前者用于高效拼接字符串,后者用于按指定格式拼接字符串
24 1
Java——String类详解
|
12天前
|
Java 数据库
java小工具util系列1:日期和字符串转换工具
java小工具util系列1:日期和字符串转换工具
27 3
|
18天前
|
存储 Java
Java编程中的对象和类
【8月更文挑战第55天】在Java的世界中,“对象”与“类”是构建一切的基础。就像乐高积木一样,类定义了形状和结构,而对象则是根据这些设计拼装出来的具体作品。本篇文章将通过一个简单的例子,展示如何从零开始创建一个类,并利用它来制作我们的第一个Java对象。准备好让你的编程之旅起飞了吗?让我们一起来探索这个神奇的过程!
27 10
|
14天前
|
安全 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的不可变性和线程安全性,以及它们提供的操作日期时间的灵活性和简洁性。
|
15天前
|
安全 Java 编译器
java访问类字段
java访问类字段
|
17天前
|
Java
java的class类
java的class类
21 5