想获取月份吗?用java.time试试看

需求背景:

根据接口入参时间格式 yyyy-MM 或者 yyyy-MM-dd获取月份 “1月”。使用
java.time中的 LocalDate.parse 和YearMonth.parse进行处理。

获取入参时间:1月

20241212 16:20

入参 yyyy-MM-dd

要将字符串形式的日期 "2024-01-01" 转换为月份名称(如 "1月"),可以通过 Java 的日期和时间工具类 java.time 实现。以下是一个示例代码:


示例代码

import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.time.format.TextStyle;
import java.util.Locale;
/**
 * @author zhizhou   2024/12/9 16:30
 */
public class MonthConversion {
    public static void main(String[] args) {
        String input = "2024-01-01";

        // 解析字符串为 LocalDate
        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
        LocalDate date = LocalDate.parse(input, formatter);

        // 获取月份并转换为中文格式
        int monthValue = date.getMonthValue(); // 数字月份
        String chineseMonth = monthValue + "月"; // 转换为中文格式

        // 输出结果
        System.out.println(chineseMonth); // 输出:1月
    }
}

说明

  1. 解析日期字符串
    使用 DateTimeFormatter 定义日期格式为 "yyyy-MM-dd",并通过 LocalDate.parse 解析输入字符串为 LocalDate 对象。
  2. 提取月份
    使用 date.getMonthValue() 提取数字形式的月份(1 表示 1 月)。
  3. 中文格式化
    将数字月份拼接上 "月",形成中文格式。

输出结果

对于输入字符串 "2024-01-01",输出结果为:

1月

可选扩展

如果需要显示完整的月份名称(如 “一月” 或 “January”),可以使用以下方法:

显示中文完整月份名称
String fullChineseMonth = date.getMonth().getDisplayName(TextStyle.FULL, Locale.CHINA);
System.out.println(fullChineseMonth); // 输出:一月
显示英文完整月份名称
String fullEnglishMonth = date.getMonth().getDisplayName(TextStyle.FULL, Locale.ENGLISH);
System.out.println(fullEnglishMonth); // 输出:January

同理当时间入参格式为yyyy-MM时,如何获取具体月份呢 “1月”

yyyy-MM

要处理这种情况,可以使用 YearMonth 类,它是 java.time 包的一部分,专门用于表示只有年月的信息。以下是正确的实现方法:


示例代码

import java.time.YearMonth;
import java.time.format.DateTimeFormatter;
/**
 * @author zhizhou   2024/12/9 16:30
 */
public class MonthConversion {
    public static void main(String[] args) {
        String input = "2024-01";

        // 使用 YearMonth 解析字符串
        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM");
        YearMonth yearMonth = YearMonth.parse(input, formatter);

        // 获取月份数字并转换为中文格式
        int monthValue = yearMonth.getMonthValue(); // 提取月份数字
        String chineseMonth = monthValue + "月"; // 拼接为中文格式

        // 输出结果
        System.out.println(chineseMonth); // 输出:1月
    }
}

说明

  1. 使用 YearMonth
    YearMonth 是一个只包含年份和月份的类,适合处理 "yyyy-MM" 格式的日期。
  2. 定义日期格式
    使用 DateTimeFormatter.ofPattern("yyyy-MM"),与输入格式匹配。
  3. 提取月份
    调用 yearMonth.getMonthValue() 获取月份的数值形式(1 表示 1 月)。
  4. 格式化为中文月份
    拼接 "月",生成中文表示。

输出结果

对于输入字符串 "2024-01",输出为:

1月

扩展功能

如果需要更丰富的月份名称:

  • 完整中文月份名称(如 “一月”):

    String fullChineseMonth = yearMonth.getMonth().getDisplayName(java.time.format.TextStyle.FULL, java.util.Locale.CHINA);
    System.out.println(fullChineseMonth); // 输出:一月
    
  • 英文月份名称(如 “January”):

    String fullEnglishMonth = yearMonth.getMonth().getDisplayName(java.time.format.TextStyle.FULL, java.util.Locale.ENGLISH);
    System.out.println(fullEnglishMonth); // 输出:January
    

时间处理在java中确实是个抹不开的东西,搞来搞去的。

<think> 我们参考用户提供的引用内容,特别是引用[1]和引用[4]中使用了Calendar类来获取日期信息。同时,引用[3]提到了java.time包,这是Java 8引入的新日期时间API,更推荐使用。 用户需求:获取电脑当前的年份、月份、日期。 我们可以提供两种方式: 1. 使用传统的Calendar类(位于java.util包中) 2. 使用Java 8引入的java.time包(如LocalDate, Year, Month, DayOfMonth等) 注意:用户要求的是当前电脑的日期,即系统当前日期。 步骤: 1. 使用Calendar类: - 获取Calendar实例:Calendar calendar = Calendar.getInstance(); - 然后可以分别获取年、、日: int year = calendar.get(Calendar.YEAR); int month = calendar.get(Calendar.MONTH) + 1; // 注意:月份是从0开始的,所以需要+1 int day = calendar.get(Calendar.DAY_OF_MONTH); 2. 使用java.time包(推荐): - 使用LocalDate.now()获取当前日期 LocalDate today = LocalDate.now(); int year = today.getYear(); int month = today.getMonthValue(); // 月份是1-12 int day = today.getDayOfMonth(); 考虑到用户可能使用不同版本的Java,我们两种方法都提供。 根据引用[3]的内容,java.time包是Java 8引入的,所以如果用户使用的是Java 8及以上版本,推荐使用第二种方法。 我们将分别用两个示例代码展示两种方法。 </think>以下是Java获取电脑当前年份、月份、日期的方法,提供两种常用实现方式: ### 方法1:使用`java.util.Calendar`(传统API) ```java import java.util.Calendar; public class CurrentDateExample { public static void main(String[] args) { // 获取Calendar实例(自动获取系统当前时间) Calendar calendar = Calendar.getInstance(); // 获取年份 int year = calendar.get(Calendar.YEAR); // 获取月份(注意:月份从0开始,需要+1) int month = calendar.get(Calendar.MONTH) + 1; // 获取日期(当第几天) int day = calendar.get(Calendar.DAY_OF_MONTH); // 输出结果 System.out.println("当前日期: " + year + "年" + month + "" + day + "日"); } } ``` ### 方法2:使用`java.time`包(Java 8+推荐) ```java import java.time.LocalDate; public class CurrentDateExample { public static void main(String[] args) { // 获取系统当前日期 LocalDate today = LocalDate.now(); // 直接获取日 int year = today.getYear(); int month = today.getMonthValue(); // 直接返回1-12的月份 int day = today.getDayOfMonth(); // 输出结果 System.out.println("当前日期: " + year + "年" + month + "" + day + "日"); } } ``` ### 关键说明: 1. **`Calendar.getInstance()`** 自动获取系统当前时间的日历实例[^1][^4] 2. **月份处理差异** - `Calendar.MONTH` 返回值范围是0(1)~11(12),需+1修正[^1] - `LocalDate.getMonthValue()` 直接返回1~12的月份值 3. **推荐方案** Java 8及以上建议使用`java.time`包(`LocalDate`等类),符合ISO-8601标准且线程安全[^3] 4. **日期精度** 上述方法获取到的是**年日**,需要时分秒可使用`LocalDateTime.now()`或`Calendar.HOUR_OF_DAY`等字段
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一周一志程序员

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值