Java获取当前日期,当前月,当前年

本文详细介绍了Java中日期工具类的使用方法,包括获取当前天、昨天、本月开始和结束日期、本周第一天和最后一天以及本年第一天和最后一天的具体实现。通过这些实用的日期操作函数,开发者可以轻松地进行日期的计算和处理。

Java获取当前天,本年第一天,本年最后一天

/**
 * 日期工具类
 */
public class DateUtils {
    /**
     * 获取今天
     * @return String
     * */
    public static String getToday(){
        return new SimpleDateFormat("yyyy-MM-dd").format(new Date());
    }
 
    /**
     * 获取昨天
     * @return String
     * */
    public static String getYestoday(){
        Calendar cal=Calendar.getInstance();
        cal.add(Calendar.DATE,-1);
        Date time=cal.getTime();
        return new SimpleDateFormat("yyyy-MM-dd").format(time);
    }
 
    /**
     * 获取本月开始日期
     * @return String
     * **/
    public static String getMonthStart(){
        Calendar cal=Calendar.getInstance();
        cal.add(Calendar.MONTH, 0);
        cal.set(Calendar.DAY_OF_MONTH, 1);
        Date time=cal.getTime();
        return new SimpleDateFormat("yyyy-MM-dd").format(time)+" 00:00:00";
    }
 
    /**
     * 获取本月最后一天
     * @return String
     * **/
    public static String getMonthEnd(){
        Calendar cal=Calendar.getInstance();
        cal.set(Calendar.DAY_OF_MONTH, cal.getActualMaximum(Calendar.DAY_OF_MONTH));
        Date time=cal.getTime();
        return new SimpleDateFormat("yyyy-MM-dd").format(time)+" 23:59:59";
    }
 
    /**
     * 获取本周的第一天
     * @return String
     * **/
    public static String getWeekStart(){
        Calendar cal=Calendar.getInstance();
        cal.add(Calendar.WEEK_OF_MONTH, 0);
        cal.set(Calendar.DAY_OF_WEEK, 2);
        Date time=cal.getTime();
        return new SimpleDateFormat("yyyy-MM-dd").format(time)+" 00:00:00";
    }
 
    /**
     * 获取本周的最后一天
     * @return String
     * **/
    public static String getWeekEnd(){
        Calendar cal=Calendar.getInstance();
        cal.set(Calendar.DAY_OF_WEEK, cal.getActualMaximum(Calendar.DAY_OF_WEEK));
        cal.add(Calendar.DAY_OF_WEEK, 1);
        Date time=cal.getTime();
        return new SimpleDateFormat("yyyy-MM-dd").format(time)+" 23:59:59";
    }
 
    /**
     * 获取本年的第一天
     * @return String
     * **/
    public static String getYearStart(){
        return new SimpleDateFormat("yyyy").format(new Date())+"-01-01";
    }
  
    /**
     * 获取本年的最后一天
     * @return String
     * **/
    public static String getYearEnd(){
        Calendar calendar = Calendar.getInstance();
        calendar.set(Calendar.MONTH,calendar.getActualMaximum(Calendar.MONTH));
        calendar.set(Calendar.DAY_OF_MONTH,calendar.getActualMaximum(Calendar.DAY_OF_MONTH));
        Date currYearLast = calendar.getTime();
        return new SimpleDateFormat("yyyy-MM-dd").format(currYearLast)+" 23:59:59";
    }
}
<think>根据用户的问题,用户需要获取当前年份的第一天和最后一天的日期。我们可以使用Java的`java.util.Calendar`类或者Java 8及以后版本的`java.time`包来实现。下面分别给出两种方法: ### 方法一:使用`java.util.Calendar`(适用于Java 7及以前版本) ```java import java.util.Calendar; import java.util.Date; import java.text.SimpleDateFormat; public class Main { public static void main(String[] args) { // 获取当前年份的第一天 Calendar cal = Calendar.getInstance(); cal.set(Calendar.DAY_OF_YEAR, 1); Date firstDayOfYear = cal.getTime(); // 获取当前年份的最后一天 cal.set(Calendar.MONTH, 11); // 12 cal.set(Calendar.DAY_OF_MONTH, 31); Date lastDayOfYear = cal.getTime(); // 格式化日期输出 SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); System.out.println("第一天: " + sdf.format(firstDayOfYear)); System.out.println("最后一天: " + sdf.format(lastDayOfYear)); } } ``` ### 方法二:使用`java.time`包(Java 8及以上推荐) ```java import java.time.LocalDate; import java.time.format.DateTimeFormatter; public class Main { public static void main(String[] args) { // 获取当前年份的第一天 LocalDate firstDay = LocalDate.now().withDayOfYear(1); // 获取当前年份的最后一天 LocalDate lastDay = LocalDate.now().withMonth(12).withDayOfMonth(31); // 格式化输出 DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd"); System.out.println("第一天: " + firstDay.format(formatter)); System.out.println("最后一天: " + lastDay.format(formatter)); } } ``` **注意**:在方法二中,获取最后一天也可以使用`LocalDate.now().with(TemporalAdjusters.lastDayOfYear())`,这样更简洁。需要导入`java.time.temporal.TemporalAdjusters`。 ### 优化方法二(使用TemporalAdjusters): ```java import java.time.LocalDate; import java.time.format.DateTimeFormatter; import java.time.temporal.TemporalAdjusters; public class Main { public static void main(String[] args) { LocalDate now = LocalDate.now(); LocalDate firstDay = now.withDayOfYear(1); LocalDate lastDay = now.with(TemporalAdjusters.lastDayOfYear()); DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd"); System.out.println("第一天: " + firstDay.format(formatter)); System.out.println("最后一天: " + lastDay.format(formatter)); } } ``` ### 说明: 1. 方法一使用了传统的`Calendar`类,需要注意份是从0开始的(0代表1,11代表12)。 2. 方法二使用了Java 8引入的日期时间API,更加直观和易读,推荐使用。 3. 在方法二中,使用`TemporalAdjusters.lastDayOfYear()`可以更安全地获取年份的最后一天,避免手动设置1231日可能出现的错误(例如闰年等)。 ### 相关问题 1. 如何获取当前份的第一天和最后一天? 2. 在Java中如何计算两个日期之间的天数差? 3. Java 8的日期时间API相比旧的`Date`和`Calendar`有什么优势? [^1]: 引用内容为站内关于Java日期处理的文章,提供了基本概念和方法。 [^2]: 引用内容为站内关于获取年第一天和最后一天的方法,使用了`Calendar`类。</think>### Java 获取当前年份的第一天和最后一天 以下是两种常用方法实现(推荐使用 Java 8 的 `java.time` API): #### 方法 1:使用 Java 8+ 的 `java.time` API(推荐) ```java import java.time.LocalDate; import java.time.format.DateTimeFormatter; import java.time.temporal.TemporalAdjusters; public class YearDates { public static void main(String[] args) { // 获取当前年份第一天 LocalDate firstDay = LocalDate.now().withDayOfYear(1); // 获取当前年份最后一天 LocalDate lastDay = LocalDate.now().with(TemporalAdjusters.lastDayOfYear()); // 格式化输出 DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd"); System.out.println("第一天: " + firstDay.format(formatter)); System.out.println("最后一天: " + lastDay.format(formatter)); } } ``` #### 方法 2:使用传统的 `Calendar` 类(兼容旧版 Java) ```java import java.util.Calendar; import java.text.SimpleDateFormat; public class YearDatesLegacy { public static void main(String[] args) { Calendar calendar = Calendar.getInstance(); // 获取第一天(11日) calendar.set(Calendar.DAY_OF_YEAR, 1); String firstDay = formatDate(calendar); // 获取最后一天(1231日) calendar.set(Calendar.MONTH, 11); // 12(注意:份从0开始) calendar.set(Calendar.DAY_OF_MONTH, 31); String lastDay = formatDate(calendar); System.out.println("第一天: " + firstDay); System.out.println("最后一天: " + lastDay); } private static String formatDate(Calendar cal) { return new SimpleDateFormat("yyyy-MM-dd").format(cal.getTime()); } } ``` ### 关键点说明: 1. **`java.time` API (Java 8+)**: - 使用 `LocalDate.now()` 获取当前日期 - `withDayOfYear(1)` 设置为本年第一天 - `TemporalAdjusters.lastDayOfYear()` 获取本年最后一天 - 线程安全且更符合现代编程规范[^1] 2. **`Calendar` 类 (旧版 Java)**: - 使用 `Calendar.getInstance()` 获取当前实例 - `set(Calendar.DAY_OF_YEAR, 1)` 设置第一天 - 通过设置份为11(12)和日期为31获取最后一天 - 注意份从0开始计数(0=1,11=12)[^2] 3. **日期格式化**: - 两种方法都使用 `yyyy-MM-dd` 格式(如 `2023-01-01`) - 可通过修改 `DateTimeFormatter` 或 `SimpleDateFormat` 模式字符串调整格式 ### 执行结果示例: ``` 第一天: 2023-01-01 最后一天: 2023-12-31 ``` ### 注意事项: - 闰年处理:两种方法都会自动处理闰年的2天数问题 - 时区问题:默认使用系统时区,如需指定时区可添加: ```java // java.time LocalDate.now(ZoneId.of("Asia/Shanghai")) // Calendar calendar.setTimeZone(TimeZone.getTimeZone("GMT+8")); ``` ### 相关问题 1. 如何获取当前份的第一天和最后一天? 2. Java 8 的日期时间 API 相比旧的 `Date` 和 `Calendar` 有哪些优势? 3. 如何在 Java 中计算两个日期之间的天数差? [^1]: Java 官方文档推荐使用 `java.time` API 处理日期时间,它提供了更直观、线程安全的操作方式。 [^2]: 传统 `Calendar` 类的份从 0 开始计数是常见错误来源,使用需特别注意。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值