首页 > 编程语言 >java 日期计算

java 日期计算

时间:2024-02-19 11:24:06浏览次数:32  
标签:java public 日期 计算 Date calendar MONTH Calendar

 

 

import java.util.Calendar;
 
public class Main {
    public static void main(String[] args) {
        // 创建一个Calendar对象并设置为当前时间
        Calendar calendar = Calendar.getInstance();
        
        // 获取当前年份、月份和日期
        int year = calendar.get(Calendar.YEAR);
        int month = calendar.get(Calendar.MONTH);
        int dayOfMonth = calendar.get(Calendar.DAY_OF_MONTH);
        
        // 将月份减去1(注意需要考虑到月份从0开始计数)
        if (month == 0) {
            // 如果当前月份已经是最小值了,则需要向上调整年份
            year--;
            month = 12;
        } else {
            month--;
        }
        
        // 重新设置Calendar对象的年份、月份和日期
        calendar.set(year, month, dayOfMonth);
        
        // 输出结果
        System.out.println("倒退1个月后的日期为:" + calendar.getTime());
    }
}

 

Java 获取某月开始和结束日期的实现
1. 整体流程
为了获取某个月份的开始日期和结束日期,我们可以按照以下步骤进行操作:

获取当前日期
根据当前日期获取所需月份的第一天
根据当前日期获取所需月份的最后一天
下面我们将详细介绍每个步骤的实现方法。

2. 获取当前日期
在Java中,我们可以使用java.util.Date类和java.util.Calendar类来获取当前日期。

 

import java.util.Calendar;
import java.util.Date;

public class DateUtils {
    public static Date getCurrentDate() {
        return new Date();
    }
}

 

 
上述代码中,getCurrentDate方法返回一个Date对象,表示当前日期。

3. 获取月份的第一天和最后一天
为了获取某个月份的第一天和最后一天,我们需要先获取当前日期所在月份的第一天和最后一天。

 

import java.util.Calendar;
import java.util.Date;

public class DateUtils {
    public static Date getFirstDayOfMonth(Date date) {
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(date);
        calendar.set(Calendar.DAY_OF_MONTH, 1);
        return calendar.getTime();
    }
    
    public static Date getLastDayOfMonth(Date date) {
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(date);
        calendar.set(Calendar.DAY_OF_MONTH, calendar.getActualMaximum(Calendar.DAY_OF_MONTH));
        return calendar.getTime();
    }
}

 

上述代码中,getFirstDayOfMonth方法返回一个Date对象,表示当前日期所在月份的第一天;getLastDayOfMonth方法返回一个Date对象,表示当前日期所在月份的最后一天。

4. 完整代码
下面是整个实现的完整代码:

  

import java.util.Calendar;
import java.util.Date;

public class DateUtils {
    public static Date getCurrentDate() {
        return new Date();
    }
    
    public static Date getFirstDayOfMonth(Date date) {
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(date);
        calendar.set(Calendar.DAY_OF_MONTH, 1);
        return calendar.getTime();
    }
    
    public static Date getLastDayOfMonth(Date date) {
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(date);
        calendar.set(Calendar.DAY_OF_MONTH, calendar.getActualMaximum(Calendar.DAY_OF_MONTH));
        return calendar.getTime();
    }
    
    public static void main(String[] args) {
        Date currentDate = getCurrentDate();
        Date firstDayOfMonth = getFirstDayOfMonth(currentDate);
        Date lastDayOfMonth = getLastDayOfMonth(currentDate);
        
        System.out.println("当前日期: " + currentDate);
        System.out.println("本月第一天: " + firstDayOfMonth);
        System.out.println("本月最后一天: " + lastDayOfMonth);
    }
}

 

上述代码中的main方法演示了如何使用上述工具类来获取当前日期、当前月份的第一天和最后一天,并将结果打印输出。
-----------------------------------

package com.swift.oa;

import java.text.SimpleDateFormat;
import java.util.Calendar;

public class APP4 {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        String firstDay = getFirstDay(2022,12,"yyyy-MM-dd");
        String lastDay = getLastDay(2022,12,"yyyy-MM-dd");
        
        System.out.println(firstDay);
        
        System.out.println(lastDay);
        
        
    }
    
    
    /**
     * 根据年月获取月初第一天日期
     * @param year
     * @param month
     * @return
     */
    public static String getFirstDay(int year,int month,String format) {
        Calendar cale = Calendar.getInstance();
        
        
 
        cale.set(Calendar.YEAR,year);    //赋值年份
        cale.set(Calendar.MONTH, month-1);//赋值月份
        int lastDay = cale.getActualMinimum(Calendar.DAY_OF_MONTH);//获取月最大天数
        cale.set(Calendar.DAY_OF_MONTH, lastDay);//设置日历中月份的最大天数
        SimpleDateFormat sdf = new SimpleDateFormat(format);//格式化日期yyyy-MM-dd
        String lastDayOfMonth = sdf.format(cale.getTime());
        return lastDayOfMonth;
    }
    
    
    /**
     * 根据年月获取月末最后一天日期
     * @param year
     * @param month
     * @return
     */
    public static String getLastDay(int year,int month,String format) {
        Calendar cale = Calendar.getInstance();
        
        cale.set(Calendar.YEAR,year);//赋值年份
        cale.set(Calendar.MONTH, month-1);//赋值月份
        int lastDay = cale.getActualMaximum(Calendar.DAY_OF_MONTH);//获取月最大天数
        cale.set(Calendar.DAY_OF_MONTH, lastDay);//设置日历中月份的最大天数
        SimpleDateFormat sdf = new SimpleDateFormat(format);    //格式化日期yyyy-MM-dd
        String lastDayOfMonth = sdf.format(cale.getTime());
        return lastDayOfMonth;
    }

}

 

标签:java,public,日期,计算,Date,calendar,MONTH,Calendar
From: https://www.cnblogs.com/kelelipeng/p/18020698

相关文章

  • 一位普通Javaer的成长之路
    前言此文章用于记录自己作为Java开发者的成长历程永远置顶于我的博客为什么要做Java其实本来是想学C#做桌面应用程序的,奈何Java的火热和易上手,加上好找工作些,所以入行了Java当然,也不影响我现在偶尔会学学C#,做windows下的桌面应用程序以《斗破苍穹》的斗气段位来代表计算机专......
  • JAVA基础-正则表达式
    1,正则表达式  正则表达式,又称规则表达式,(RegularExpression,在代码中常简写为regex、regexp或RE),是一种文本模式,包括普通字符(例如,a到z之间的字母)和特殊字符(称为"元字符"),是计算机科学的一个概念。正则表达式使用单个字符串来描述、匹配一系列匹配某个句法规则的字符串,通常被用......
  • JAVA基础-类的成员
    1.类的成员-属性属性这里就是成员变量,也叫成员变量,直接定义在类中的。在方法体外声明的变量称之为成员变量实例变量(不以static修饰)类变量(以static修饰)在方法体内部声明的变量称之为局部变量形参(方法、构造器中定义的变量)方法局部变量(在方法体内定义)代码块变量(在代码......
  • JAVA基础-内存与垃圾回收
    1,运行时数据区1,程序计数器线程私有。生命周期:生命周期与线程同步。作用:它是程序控制流的指示器,分支、循环、跳转、异常处理、线程恢复等基础功能都需要依赖这个计数器来完成。特点:它是一块很小的内存空间,几乎可以忽略不记。也是运行速度最快的存储区域,唯一没有OutofMemory......
  • JAVA基础-IO
    1,IO概念IO通常表示计算机与外界数据的输入与输出。I/O流:IO流又叫输入输出流,输入和输出均是以内存作为参照物分类:1)按照流的方向以内存为参考物,往内存中去,叫做输入,从内存中出来,叫做输出。2)按照读取数据方式字节流,一次读取一个字节byte字符流,一次读取一个字符,具体几个......
  • JAVA基础-SPI
    1,什么是SPISPI全名ServiceProviderinterface,翻译过来就是“服务提供接口”,再说简单就是提供某一个服务的接口,提供给服务开发者或者服务生产商来进行实现。JavaSPI是JDK内置的一种动态加载扩展点的实现。这个机制在一般的业务代码中很少用到(个人接触到的业务没有用到过),但是......
  • JAVA基础-反射
    1,什么是反射?  Java反射就是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意方法和属性;并且能改变它的属性。而这也是Java被视为动态(或准动态,为啥要说是准动态,因为一般而言的动态语言定义是程序运行时,允许改变程序结构或变量类......
  • JAVA基础-泛型
    1,泛型概述泛型,即“参数化类型”。一提到参数,最熟悉的就是定义方法时有形参,然后调用此方法时传递实参。那么参数化类型怎么理解呢?顾名思义,就是将类型由原来的具体的类型参数化,类似于方法中的变量参数,此时类型也定义成参数形式(可以称之为类型形参),然后在使用/调用时传入具体的类型......
  • JAVA基础-序列化
    1,什么是序列化?Java序列化是指把Java对象转换为字节序列的过程,而Java反序列化是指把字节序列恢复为Java对象的过程。2,序列化的使用场景永久性保存对象,保存对的字节序列到本地文件或者数据库中;通过序列化以字节流的形式对象在网络中进行传递和接收;通过序列化在进程间传递......
  • JAVA基础-Steam
    1,OptionalJava8中的Optional是一个可以包含或不可以包含非空值的容器对象。1.1,获取Optional的三个方法1.of(value)返回一个Optional,value不可以为null2.empty()返回一个空的Optional3.ofNullable(value)返回一个Optional,如果value为null,就是empty(),否......