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); } }
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); } }
java.time
包下的日期时间 API(Java 8 引入)
LocalDate
、LocalTime
和LocalDateTime
类
- 基本介绍
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); } }
ZonedDateTime
和ZoneId
类
- 基本介绍
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); } }