Java片段:Date 与 Calendar 的互相转换

本文详细介绍了如何在Java中将日期转换为Calendar对象,并从Calendar对象获取日期。通过实例演示了两种常见的日期转换操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、Date 转换为 Calendar:

Date dNow = new Date();
Calendar calendar = Calendar.getInstance();
calendar.setTime(dNow);

2、Calendar 转换为 Date

<pre name="code" class="java">Calendar calendar = Calendar.getInstance();
Date date = calendar.getTime(); 


### Java 中用于处理日期的类及其用法 #### 一、JDK 8 前的日期时间类 在 JDK 8 发布前,Java 提供了几种主要的日期时间类来满足开发者的日常需求。然而,这些类存在诸多不足之处。 1. **`java.util.Date` 类** `java.util.Date` 是最早的日期时间类之一,主要用于表示特定的时间点。尽管它能够提供当前的日期和时间,但大部分方法已被标记为废弃(deprecated)。此外,该类既不支持时区信息也不具备线程安全性[^1]。 2. **`java.util.Calendar` 类** 这是一个更为全面的日期时间处理工具,允许开发者执行更精确的操作,比如增加或减少日期部分。不过,由于其设计复杂度较高,通常会使代码显得冗长且不易维护。同样地,`Calendar` 不是线程安全的[^1]。 3. **`java.text.SimpleDateFormat` 类** 此类提供了将日期格式化成字符串以及从字符串解析回日期的功能。但是,正如其他旧版 API 所面临的问题一样,`SimpleDateFormat` 缺乏线程安全保障,在多线程环境下容易引发错误[^1]。 以下是展示如何在这两个包之间相互转换的一个例子: ```java package com.demo.demo01; import java.sql.Date; import java.util.Date; public class Demo04Date { public static void main(String[] args) { // sql 包下的 Date 转换到 util 包下的 Date java.sql.Date sqlDate = java.sql.Date.valueOf("2000-12-12"); System.out.println(sqlDate); java.util.Date utilDate = new Date(sqlDate.getTime()); System.out.println(utilDate.toLocaleString()); // util 包下的 Date 转换到 sql 包下的 Date java.sql.Date convertedSqlDate = new java.sql.Date(utilDate.getTime()); System.out.println(convertedSqlDate); } } ``` 上述代码片段展示了两种常见类型的互相化方式[^2]。 #### 二、JDK 8 的现代日期时间框架 (JSR 310) 随着技术的发展,为了弥补早期版本中存在的缺陷并引入更多功能特性,自 JDK 8 开始推出了全新的日期时间和计时器库 JSR 310 。这一套体系结构更加直观易懂,并且完全基于不可变对象模型构建而成从而天然具有良好的并发性能表现。 1. **`LocalDate`, `LocalTime`, 和 `LocalDateTime`** - `LocalDate`: 表示不含有时区信息的日历日期。 - `LocalTime`: 表示仅含有的时刻而不涉及具体某一天的信息。 - `LocalDateTime`: 结合了两者优势的一种复合类型,既可以表达确切的一天又可指定具体的某个瞬间发生于何时何处[^3]。 2. **`DateTimeFormatter`** 新增了一个灵活强大的格式化工厂用来定制输出样式或者按照给定模板读取输入数据流中的有效成分[^3]。 3. **`TemporalAdjusters`** 它们是一组实用程序函数集合体,可以帮助我们轻松完成诸如找到本月最后一个工作日之类的高级任务而无需手动编码实现细节逻辑[^5]。 下面给出一段简单的测试案例演示几个核心概念的实际运用场景: ```java import java.time.*; import java.time.format.DateTimeFormatter; import java.time.temporal.TemporalAdjusters; public class TestNewAPI { public static void main(String[] args){ LocalDate today = LocalDate.now(); LocalDateTime now = LocalDateTime.of(today, LocalTime.NOON); DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); String formattedNow = now.format(formatter); System.out.println(formattedNow); LocalDate nextSunday = today.with(TemporalAdjusters.next(DayOfWeek.SUNDAY)); System.out.println(nextSunday); } } ``` 此段脚本首先打印出了此刻的标准表述形式接着再算出来距离今天最近的那个周日的具体数值^。 --- 相关问题
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值