Java Calendar一般用法

本文介绍了 Java 中 Calendar 类的基本用法,包括如何获取当前日期和时间、设置特定日期、比较两个日期以及获取日期的不同部分(如年、月、日)。通过示例代码展示了 Calendar 类在实际应用中的操作。

api中简单介绍下

Calendar 类是一个抽象类,它为特定瞬间与一组诸如 YEARMONTHDAY_OF_MONTHHOUR日历字段之间的转换提供了一些方法,并为操作日历字段(例如获得下星期的日期)提供了一些方法。瞬间可用毫秒值来表示,它是距历元(即格林威治标准时间 1970 年 1 月 1 日的 00:00:00.000,格里高利历)的偏移量。

该类还为实现包范围外的具体日历系统提供了其他字段和方法。这些字段和方法被定义为 protected

与其他语言环境敏感类一样,Calendar 提供了一个类方法 getInstance,以获得此类型的一个通用的对象。CalendargetInstance 方法返回一个 Calendar 对象,其日历字段已由当前日期和时间初始化:

     Calendar rightNow = Calendar.getInstance();
 

Calendar 对象能够生成为特定语言和日历风格实现日期-时间格式化所需的所有日历字段值,例如,日语-格里高里历,日语-传统日历。Calendar 定义了某些日历字段返回值的范围,以及这些值的含义。例如,对于所有日历,日历系统第一个月的值是 MONTH == JANUARY。其他值是由具体子类(例如 ERA)定义的。有关此内容的细节,请参阅每个字段的文档和子类文档。

示例代码:

package com.日期类;


import java.util.Calendar;


public class CalendarDemo {
public static void main(String[] args) {
Calendar c1=Calendar.getInstance();
Calendar c2=Calendar.getInstance();
// System.out.println(c1);
System.out.println(c1.get(Calendar.DAY_OF_YEAR));
System.out.println(c1.get(Calendar.DAY_OF_MONTH));
System.out.println(c1.get(Calendar.YEAR));
System.out.println(c1.get(Calendar.MONTH));

c2.set(2013, 7, 8);
System.out.println(c2.getTime());
System.out.println(c1.compareTo(c2));


}
}

### Java 中 `Calendar` 类全部用法示例详解 #### 创建 `Calendar` 实例 由于 `Calendar` 是一个抽象类,无法直接实例化。可以通过调用静态工厂方法 `getInstance()` 来获得其实例,该方法返回的是 `GregorianCalendar` 的子类对象[^3]。 ```java // 获取默认时区和语言环境下的 Calendar 对象 Calendar calendar = Calendar.getInstance(); ``` #### 设置日期时间组件 可以利用 `set(int field, int value)` 方法来设置特定的日历字段,比如年份、月份(注意:月份是从0开始计数)、日子等。 ```java calendar.set(Calendar.YEAR, 2023); calendar.set(Calendar.MONTH, Calendar.DECEMBER); // 十二月对应值为11 calendar.set(Calendar.DAY_OF_MONTH, 25); ``` #### 获取日期时间信息 使用 `get(int field)` 函数读取指定的时间单位部分,如获取当前年的天数或星期几等。 ```java int dayOfMonth = calendar.get(Calendar.DAY_OF_MONTH); String dayOfWeekName = new SimpleDateFormat("EEEE").format(calendar.getTime()); System.out.println("Day of Month: " + dayOfMonth); System.out.println("Day of Week Name: " + dayOfWeekName); ``` #### 增加/减少某个时间段 借助于 `add(int field, int amount)` 和 `roll(int field, boolean up)` 可以实现对某一时间单元做增量调整而不影响其他更大的时间单元;而 roll 则只改变目标域本身不牵连到更高层次的变化。 ```java calendar.add(Calendar.DATE, 7); // 向前推移七天 calendar.roll(Calendar.WEEK_OF_YEAR, true); // 当周向后滚动一周 ``` #### 时间戳转换 能够把毫秒级别的 long 类型数值转化为对应的 Date 对象表示形式以及反向操作。 ```java long timeInMillis = System.currentTimeMillis(); Date dateFromMillis = new Date(timeInMillis); calendar.setTime(dateFromMillis); timeInMillis = calendar.getTimeInMillis(); ``` #### 自定义时区与时钟偏移量 支持设定不同的区域时间和夏令时规则,这对于跨国界的应用程序尤为重要。 ```java TimeZone gmtZone = TimeZone.getTimeZone("GMT"); calendar.setTimeZone(gmtZone); ``` #### 配合格式化器输出友好显示字符串 结合 `SimpleDateFormat` 或者新的 DateTimeFormatter API 进行定制化的文本呈现。 ```java SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss zzz"); sdf.setTimeZone(TimeZone.getDefault()); // 设定本地时区 String formattedTime = sdf.format(calendar.getTime()); DateTimeFormatter dtf = DateTimeFormatter.ofPattern("dd/MM/yyyy EEEE hh:mm a"); LocalDateTime ldt = LocalDateTime.now(ZoneId.systemDefault()); ZonedDateTime zonedDt = ZonedDateTime.of(ldt, ZoneOffset.UTC); formattedTime = dtf.format(zonedDt.toLocalDateTime()); ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值