Java日期与数字处理全解析
立即解锁
发布时间: 2025-08-17 02:35:36 订阅数: 15 

### Java 日期与数字处理全解析
在 Java 编程中,日期、时间和数字的处理是非常常见的需求。Java 提供了丰富的类和方法来帮助我们完成这些任务。本文将详细介绍 `java.util.Calendar`、`java.text.DateFormat` 和 `java.text.NumberFormat` 这几个重要的类,以及它们的使用方法。
#### 1. `java.util.Calendar` 类
`Calendar` 类是一个抽象类,用于处理日期和时间。它提供了许多方法来获取、设置和操作日期和时间的各个部分。
##### 1.1 创建 `Calendar` 实例
`Calendar` 类提供了静态工厂方法来创建 `Calendar` 实例,常用的方法有:
- `static Calendar getInstance()`:返回一个使用默认时区和默认语言环境的 `Calendar` 实例,表示当前日期和时间。
- `static Calendar getInstance(Locale loc)`:返回一个使用默认时区和指定语言环境的 `Calendar` 实例,表示当前日期和时间。
示例代码如下:
```java
import java.util.Calendar;
import java.util.Locale;
public class CalendarExample {
public static void main(String[] args) {
// 使用默认时区和默认语言环境
Calendar calendar1 = Calendar.getInstance();
System.out.println(calendar1.getTime());
// 使用默认时区和指定语言环境
Locale locale = new Locale("en", "US");
Calendar calendar2 = Calendar.getInstance(locale);
System.out.println(calendar2.getTime());
}
}
```
##### 1.2 与 `Date` 类的互操作性
`Calendar` 类提供了两个方法来实现与 `Date` 类的互操作性:
- `Date getTime()`:返回一个 `Date` 对象,表示 `Calendar` 实例的日期和时间。
- `void setTime(Date date)`:根据指定的 `Date` 对象设置 `Calendar` 实例的日期和时间。
示例代码如下:
```java
import java.util.Calendar;
import java.util.Date;
public class CalendarDateInteroperability {
public static void main(String[] args) {
Calendar calendar = Calendar.getInstance();
// 获取 Date 对象
Date date = calendar.getTime();
System.out.println(date);
// 设置 Calendar 的日期和时间
Date newDate = new Date();
calendar.setTime(newDate);
System.out.println(calendar.getTime());
}
}
```
##### 1.3 选择的 `get` 和 `set` 方法
`Calendar` 类中的信息通过字段编号来访问。`Calendar` 类为日历中的各个字段(如年、月、日、小时、分钟、秒)定义了字段编号。部分字段编号如下表所示:
| 常量 | 字段编号表示的含义 |
| --- | --- |
| `Calendar.WEEK_OF_YEAR` | 当前年份内的周数 |
| `Calendar.WEEK_OF_MONTH` | 当前月份内的周数 |
| `Calendar.DAY_OF_YEAR` | 当前年份内的天数 |
| `Calendar.DAY_OF_MONTH` | 当前月份内的天数 |
| `Calendar.DATE` | 当前日期(与 `DAY_OF_MONTH` 相同) |
| `Calendar.DAY_OF_WEEK` | 当前周内的天数 |
| `Calendar.YEAR` | 日历中的年份 |
| `Calendar.MONTH` | 年份内的月份 |
| `Calendar.HOUR` | 一天内的小时数(12 小时制) |
| `Calendar.HOUR_OF_DAY` | 一天内的小时数(24 小时制) |
| `Calendar.MINUTE` | 一小时内的分钟数 |
| `Calendar.SECOND` | 一分钟内的秒数 |
| `Calendar.MILLISECOND` | 一秒内的毫秒数 |
`get` 方法用于返回指定字段的值,返回值为 `int` 类型。示例代码如下:
```java
import java.util.Calendar;
public class CalendarGetExample {
public static void main(String[] args) {
Calendar calendar = Calendar.getInstance();
int year = calendar.get(Calendar.YEAR);
int month = calendar.get(Calendar.MONTH);
int dayOfMonth = calendar.get(Calendar.DAY_OF_MONTH);
System.out.printf("%4d-%02d-%02d%n", year, month + 1, dayOfMonth);
}
}
```
需要注意的是,`Calendar.MONTH` 的值从 0 开始,所以在打印月份时需要加 1。
`set` 方法用于设置指定字段的值,有多种重载形式:
- `void set(int fieldNumber, int fieldValue)`:设置指定字段的值。
- `void set(int year, int month, int dayOfMonth)`:设置年、月、日。
- `void set(int year, int month, int dayOfMonth, int hourOfDay, int minute)`:设置年、月、日、小时、分钟。
- `void set(int year, int month, int dayOfMonth, int hourOfDay, int minute, int second)`:设置年、月、日、小时、分钟、秒。
示例代码如下:
```java
import java.util.Calendar;
public class CalendarSetExample {
public static void main(String[] args) {
Calendar calendar = Calendar.getInstance();
System.out.println(calendar.getTime());
// 设置日期
calendar.set(Calendar.DAY_OF_MONTH, 33);
calendar.set(Calendar.MONTH, Calendar.OCTOBER);
System.out.println(calendar.getTime());
}
}
```
在上述代码中,当设置的日期超出范围时,`Calendar` 会自动进行调整。
##### 1.4 操作 `Calendar`
`Calendar` 类提供了 `add` 和 `roll` 方法来操作日期和时间:
- `void add(int field, int amount)`:将指定字段的值增加或减少指定的数量。所有字段都会重新计算。
- `void roll(int field, int amount)`:将指定字段的值增加或减少指定的数量,但较大的字段不会改变。
示例代码如下:
```java
import java.util.Calendar;
public class CalendarManipulation {
public static void main(String[] args) {
Calendar calendar = Calendar.getInstance();
System.out.println(calendar.getTime());
// 使用 add 方法
calendar.add(Calendar.MONTH, 13);
System.out.println(calendar.getTime());
// 使用 roll 方法
calendar.roll(Calendar.MONTH, 13);
System.out.println(calendar.getTime());
}
}
```
##### 1.5 比较 `Calendar` 实例
`Calendar` 类实现了 `Comparable<Calendar>` 接口,因此可以比较两个 `Calendar` 实例的日期和时间。比较是基于从纪元开始的毫秒偏移量。示例代码如下:
```java
import java.util.Calendar;
public class CalendarComparison {
public static void main(String[] args) {
Calendar calendar1 = Calendar.getInstance();
Calendar calendar2 = Calendar.getInstance();
// 设置 calendar2 的日期比 calendar1 晚一天
calendar2.add(Calendar.DAY_OF_MONTH, 1);
int result = calendar1.compareTo(calendar2);
if (result < 0) {
System.out.println("calendar1 在 calendar2 之前");
} else if (result > 0) {
System.out.println("calendar1 在 calendar2 之后");
} else {
System.out.println("calendar1 和 calendar2 相同");
}
}
}
```
#### 2. `java.text.DateFormat` 类
`DateFormat` 是一个抽象类,用于格式化和解析日期和时间。它提供了多种静态工厂方法来创建日期和时间格式化器。
##### 2.1 创建日期/时间格式化器
`DateFormat` 类提供了一系列静态工厂方法来创建日期、时间和日期时间的格式化器,常用的方法如下:
- `static DateFormat getInstance()`:返回一个默认的日期/时间格式化器,使用 `DateFormat.SHORT` 风格。
- `static DateFormat getDateInstance()`:返回一个默认风格的日期格式化器。
- `static DateFormat getDateInstance(int dateStyle)`:返回指定风格的日期格式化器。
- `static DateFormat getDateInstance(int dateStyle, Locale loc)`:返回指定风格和语言环境的日期格式化器。
- `static DateFormat getTimeInstance()`:返回一个默认风格的时间格式化器。
- `static DateFormat getTimeInstance(int timeStyle)`:返回指定风格的时间格式化器。
- `static DateFormat getTimeInstance(int timeStyle, Locale loc)`:返回指定风格和语言环境的时间格式化器。
- `static DateFormat getDateTimeInstance()`:返回一个默认风格的日期时间格式化器。
- `static DateFormat getDateTimeInstance(int dateStyle, int timeStyle)`:返回指定风格的日期时间格式化器。
- `static DateFormat getDateTimeInstance(int dateStyle, int timeStyle, Locale loc)`:返回指定风格和语言环境的日期时间格式化器。
日期和时间的格式化风格有以下几种:
| 风格 | 描述 | 示例(美国语言环境) |
| --- | --- | --- |
| `DateFormat.DEFAULT` | 默认风格 | Mar 6, 2008 6:08:39 PM |
| `DateFormat.FULL` | 完整风格 | Thursday, March 6, 2008 6:08:39 PM EST |
| `DateFormat.LONG` | 长风格 | March 6, 2008 6:08:39 PM EST |
| `DateFormat.MEDIUM` | 中等风格 | Mar 6, 2008 6:08:39 PM |
| `DateFormat.SHORT` | 短风格 | 3/6/08 6:08 PM |
示例代码如下:
```java
import java.text.DateFormat;
import java.util.Date;
import java.util.Locale;
public class DateFormatExample {
public static void main(String[] args) {
Date date = new Date
```
0
0
复制全文
相关推荐










