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

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

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

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

 c.add(Calendar.MONTH, -1); 

然后,您可以在Calendar上调用getter以获取正确的字段

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

java.time

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

 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 

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

DateTime#minusMonths方法可以帮助您获得上个月。

 DateTime month = new DateTime().minusMonths (1); 

您可以使用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())); 

打印: 2012.09.10 11:01实际日期2012.10.10 11:01

最简单且最不容易出错的方法是……使用Calendar的roll()方法。 喜欢这个:

  c.roll(Calendar.MONTH, false); 

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

你需要知道月份是零,所以当你执行getMonth时,你需要添加1.在下面的例子中,我们必须将Januaray的1添加为1而不是0

  Calendar c = Calendar.getInstance(); c.set(2011, 2, 1); c.add(Calendar.MONTH, -1); int month = c.get(Calendar.MONTH) + 1; assertEquals(1, month); 
 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); } 

我认为这会有效.. 🙂

 import java.util.Calendar; public class Main { public static void main(String[] args) { Calendar now = Calendar.getInstance(); System.out.println("Current date : " + (now.get(Calendar.MONTH) + 1) + "-" + now.get(Calendar.DATE) + "-" + now.get(Calendar.YEAR)); //Current Date now = Calendar.getInstance(); now.add(Calendar.MONTH, -1); // Decrement Month by 1 if((now.get(Calendar.MONTH) + 1)==0){ //Checks if Month is January and Decrements Year by 1 and increments Month by 11 now.add(Calendar.MONTH, 11); now.add(Calendar.YEAR, -1); } System.out.println("date before 1 months : " + (now.get(Calendar.MONTH) + 1) + "-" + now.get(Calendar.DATE) + "-" + now.get(Calendar.YEAR)); // Drecemented Date } } 

这是代码片段。我认为它有效。

  Calendar cal = Calendar.getInstance(); SimpleDateFormat simpleMonth=new SimpleDateFormat("MMMM YYYY"); cal.add(Calendar.MONTH, -1); System.out.println(simpleMonth.format(prevcal.getTime()));