Java 实例 - 获取年份、月份等

import java.util.Calendar;
 
public class Main {
    public static void main(String[] args) {
        Calendar cal = Calendar.getInstance();
        int day = cal.get(Calendar.DATE);
        int month = cal.get(Calendar.MONTH) + 1;
        int year = cal.get(Calendar.YEAR);
        int dow = cal.get(Calendar.DAY_OF_WEEK);//一周的第几天
        int dom = cal.get(Calendar.DAY_OF_MONTH);//一月中的第几天
        int doy = cal.get(Calendar.DAY_OF_YEAR);//一年的第几天
 
        System.out.println("当期时间: " + cal.getTime());
        System.out.println("日期: " + day);
        System.out.println("月份: " + month);
        System.out.println("年份: " + year);
        System.out.println("一周的第几天: " + dow);  // 星期日为一周的第一天输出为 1,星期一输出为 2,以此类推
        System.out.println("一月中的第几天: " + dom);
        System.out.println("一年的第几天: " + doy);
    }
}

以上代码运行输出结果为:

当期时间: Fri Mar 27 21:44:15 CST 2015
日期: 27
月份: 3
年份: 2015
一周的第几天: 6
一月中的第几天: 27
一年的第几天: 86

参考自http://www.runoob.com/java/date-year-month.html

<think>好的,用户的问题是关于在Java获取当前年份月份的。我需要先整理一下提供的引用内容,看看有哪些方法可以实现这个需求。 首先,引用1、2、3、4、5都提到了不同的方法。引用3和5提到了使用Date类和Calendar类,而引用2和4可能涉及新的时间API,比如Java 8之后的LocalDate。不过用户提到的引用中,引用3和4使用的是SimpleDateFormat和Calendar,而引用5中的Calendar需要加1来获取正确的月份,因为Calendar月份是从0开始的。 接下来,我需要分步骤说明不同的方法。第一种方法是使用传统的Calendar类,这是Java 8之前常用的方式。这里需要注意的是,Calendar月份是从0到11,所以获取后要加1。引用5中的代码也提到了这一点。例如,cal.get(Calendar.MONTH) + 1。 第二种方法是使用Java 8引入的LocalDate类,这是更现代的方式,代码更简洁。LocalDate的getMonthValue()直接返回1到12的月份,不需要调整。引用2可能提到了新的时间API,但具体代码可能需要补充。 第三种方法是使用SimpleDateFormat配合Date类,如引用3和4所示。可以创建SimpleDateFormat实例,指定格式为"yyyy"和"MM",然后格式化当前期。例如,formatYear.format(new Date())得到年份,formatMonth.format(new Date())得到月份。 还需要注意线程安全的问题,尤其是SimpleDateFormat不是线程安全的,如果在多线程环境下使用,可能会有问题。而DateTimeFormatter在Java 8中是线程安全的,可以推荐使用。 用户可能需要知道不同方法的优缺点。比如,旧版Calendar和Date存在设计问题,而新版API更清晰。所以推荐使用Java 8的LocalDate方法。 然后,生成相关问题,需要围绕时间处理的其他常见需求,比如获取月份的第一天和最后一天(引用4中的代码),或者处理时区问题,或者比较期等。 现在,整理回答结构,先介绍三种方法,每种方法的步骤和示例代码,指出注意事项,最后推荐最佳实践。确保代码示例正确,比如Calendar方法中的月份加1,LocalDate的直接获取等。 最后,验证引用内容是否准确。引用4中的代码确实展示了如何获取第一天和最后一天,可能用户后续问题会涉及这些,所以相关问题中可以包含这些内容。</think>### 分步说明 在Java获取当前年份月份可以通过以下三种方法实现,根据不同的Java版本和需求选择合适的方式: --- #### 方法1:使用`Calendar`类(传统API) 1. **创建`Calendar`实例**:通过`Calendar.getInstance()`获取当前时间历对象。 2. **获取年份月份**: - 年份直接通过`Calendar.YEAR`获取- 月份需注意:`Calendar.MONTH`返回0(1)到11(12),需**+1**调整为实际月份。 ```java Calendar cal = Calendar.getInstance(); int year = cal.get(Calendar.YEAR); // 例如2023 int month = cal.get(Calendar.MONTH) + 1; // 例如7(表示7)[^5] ``` --- #### 方法2:使用`LocalDate`类(Java 8+推荐) 1. **获取当前期对象**:`LocalDate.now()`返回当前期。 2. **直接读取年份月份**: - `getYear()`返回完整年份- `getMonthValue()`直接返回1到12的月份值,无需调整。 ```java LocalDate currentDate = LocalDate.now(); int year = currentDate.getYear(); // 例如2023 int month = currentDate.getMonthValue(); // 例如7(表示7) ``` --- #### 方法3:使用`SimpleDateFormat`(配合`Date`类) 1. **定义期格式**:通过`SimpleDateFormat`指定格式`yyyy`(年份)和`MM`(月份)。 2. **格式化当前时间**:将`new Date()`传入格式化的方法中。 ```java SimpleDateFormat formatYear = new SimpleDateFormat("yyyy"); SimpleDateFormat formatMonth = new SimpleDateFormat("MM"); String yearStr = formatYear.format(new Date()); // "2023" String monthStr = formatMonth.format(new Date()); // "07"(字符串类型)[^3] ``` --- ### 注意事项 1. **线程安全**:`SimpleDateFormat`非线程安全,多线程环境下需配合`ThreadLocal`使用[^3]。 2. **API选择**:优先使用Java 8的`LocalDate`,代码更简洁且线程安全。 3. **月份修正**:使用`Calendar`时务必对月份+1,避免逻辑错误。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值