java计算指定日期的上个月

举报
别团等shy哥发育 发表于 2023/06/21 23:05:13 2023/06/21
【摘要】 @[TOC] java计算指定日期的上个月 Calendar类    Calendar类是一个抽象类,可以为在某一特定时刻和一组之间的转换的方法calendar fields如YEAR , MONTH , DAY_OF_MONTH , HOUR ,等等,以及用于操纵该日历字段,如获取的日期下个星期。 时间上的瞬间可以用毫秒值表示,该值是从1970年1月1日00:00 00:00.000 GM...

@[TOC]

java计算指定日期的上个月

Calendar类

    Calendar类是一个抽象类,可以为在某一特定时刻和一组之间的转换的方法calendar fields如YEAR , MONTH , DAY_OF_MONTH , HOUR ,等等,以及用于操纵该日历字段,如获取的日期下个星期。 时间上的瞬间可以用毫秒值表示,该值是从1970年1月1日00:00 00:00.000 GMT(Gregorian)的Epoch的偏移量。
    Calendar提供了一种类方法getInstance ,用于获取此类型的一般有用的对象。 Calendar的getInstance方法返回一个Calendar对象,其日历字段已使用当前日期和时间进行初始化:

 Calendar rightNow = Calendar.getInstance();

    Calendar对象可以产生实现特定语言和日历风格的日期时间格式化所需的所有日历字段值(例如日语 - 公历,日语 - 繁体)。 Calendar定义某些日历字段返回的值的范围及其含义。 例如,日历系统第一个月的值为MONTH == JANUARY为所有日历。 其他值由具体的子类定义,如ERA 。 有关详细信息,请参阅各个实体文档和子类文档。

以上来源于jdk1.8官方文档

API

修饰符和类型 方法 说明
abstract void add(int field, int amount) 根据日历的规则,将指定的时间量添加或减去给定的日历字段。
static Calendar getInstance() 使用默认时区和区域设置获取日历。
void setTime(Date date) 使用给定的 Date设置此日历的时间。
Date getTime() 返回一个 Date表示此物体 Calendar的时间值(毫秒从偏移 Epoch “)。

代码实现

package test;

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

public class DateTest {

    /*
     * 计算日期的上一个月
     */
    public static String getPrevMonthDate(Date date,int n) {  
    	Calendar calendar = Calendar.getInstance();  
    	calendar.setTime(date);
    	calendar.set(Calendar.MONTH, calendar.get(Calendar.MONTH) - n);  
    	return new SimpleDateFormat("yyyy-MM").format(calendar.getTime());  
    }
    //获取指定日期的前几个月或者后几个月
    public static String test(Date date,int n) {  
    	Calendar calendar = Calendar.getInstance();  
    	calendar.setTime(date);
    	calendar.add(Calendar.MONTH, -n);
    	return new SimpleDateFormat("yyyy-MM").format(calendar.getTime());  
    }

    
    public static void main(String[] args) {
        String dateString = "2021-01-23";
        try {
			Date date= new SimpleDateFormat("yyyy-MM-dd").parse(dateString);
			//输出指定日期的上一个月,如果是-1则代表数据下一个月
			System.out.println(getPrevMonthDate(date, 1));
			System.out.println(test(date,1));
		} catch (ParseException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
}

在这里插入图片描述

上面给了两种方法都可以实现,推荐使用第二种

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。