如何在java中获得前一个月和几年?

ash*_*ram 28 java calendar java-time

如何在java中找出上个月和它的年份

例如,如果今天是2012年10月10日,结果应该是月= 9和年= 2012,如果今天是2013年1月10日,结果应该是月= 12和年= 2012

Gai*_*aim 60

你的解决方案在这里,但你需要使用减法而不是添加

c.add(Calendar.MONTH, -1);
Run Code Online (Sandbox Code Playgroud)

然后,你可以调用的getterCalendar获得适当的领域

int month = c.get(Calendar.MONTH) + 1; // beware of month indexing from zero
int year  = c.get(Calendar.YEAR);
Run Code Online (Sandbox Code Playgroud)


Prz*_*mek 17

java.time

使用java.timeJava 8中内置的框架:

import java.time.LocalDate;

LocalDate now = LocalDate.now(); // 2015-11-24
LocalDate earlier = now.minusMonths(1); // 2015-10-24

earlier.getMonth(); // java.time.Month = OCTOBER
earlier.getMonth.getValue(); // 10
earlier.getYear(); // 2015
Run Code Online (Sandbox Code Playgroud)

  • 对于 3 月 28..31 日,它返回 2 月 28 日,因此它回答了原来的问题。 (2认同)

Sub*_*der 10

使用Joda时间库.使用它可以很容易地处理日期,时间,日历和语言环境,它将在版本8中集成到Java中.

DateTime#minusMonths 方法会帮助你上个月.

DateTime month = new DateTime().minusMonths (1); 
Run Code Online (Sandbox Code Playgroud)


MaV*_*SCy 9

您可以使用Calendar类来执行此操作:

SimpleDateFormat format = new SimpleDateFormat("yyyy.MM.dd HH:mm");
Calendar cal = Calendar.getInstance();
cal.add(Calendar.MONTH, -1);
System.out.println(format.format(cal.getTime()));
Run Code Online (Sandbox Code Playgroud)

这打印:2012.09.10 11:01用于实际日期2012.10.10 11:01


G F*_*res 8

最简单且最不容易出错的方法是......使用Calendar的roll()方法.像这样:

    c.roll(Calendar.MONTH, false);
Run Code Online (Sandbox Code Playgroud)

roll方法采用布尔值,这基本上意味着将月份向上滚动(true)或向下滚动(false)?

  • 这不会滚动一年.如果你使用它,年份不会改变. (2认同)

小智 5

private static String getPreviousMonthDate(Date date){
    final SimpleDateFormat format = new SimpleDateFormat("dd-MM-yyyy");

    Calendar cal = Calendar.getInstance();  
    cal.setTime(date);  
    cal.set(Calendar.DAY_OF_MONTH, 1);  
    cal.add(Calendar.DATE, -1);

    Date preMonthDate = cal.getTime();  
    return format.format(preMonthDate);
}


private static String getPreToPreMonthDate(Date date){
    final SimpleDateFormat format = new SimpleDateFormat("dd-MM-yyyy");

    Calendar cal = Calendar.getInstance();  
    cal.setTime(date);  
    cal.add(Calendar.MONTH, -1);  
    cal.set(Calendar.DAY_OF_MONTH,1);  
    cal.add(Calendar.DATE, -1);  

    Date preToPreMonthDate = cal.getTime();  
    return format.format(preToPreMonthDate);
}
Run Code Online (Sandbox Code Playgroud)

  • 请避免仅提供代码答案。尝试解释你的代码如何解决OP的问题。 (3认同)

Pra*_*ham 5

YearMonth班级

您可以使用该类java.time.YearMonth及其minusMonths方法。

YearMonth lastMonth = YearMonth.now().minusMonths(1);
Run Code Online (Sandbox Code Playgroud)

调用将为您提供标准ISO 8601toString格式的输出:yyyy-mm

您可以访问零件、年份和月份。您可以选择使用Month枚举对象,或者仅使用int1-12 的月份值。

int year = lastMonth.getYear() ;
int month = lastMonth.getMonthValue() ;
Month monthEnum = lastMonth.getMonth() ;
Run Code Online (Sandbox Code Playgroud)