有了今天的日期,我应该得到上个月的第一个日期和最后一个日期。我想不出任何逻辑。
例如,在通过05/30/2012
时,我应该得到04/01/2012
and 04/30/2012
。
任何帮助都感激不尽。谢谢。
Calendar cal = Calendar.getInstance();
cal.add(Calendar.MONTH, -1);
cal.set(Calendar.DATE, 1);
Date firstDateOfPreviousMonth = cal.getTime();
cal.set(Calendar.DATE, cal.getActualMaximum(Calendar.DATE)); // changed calendar to cal
Date lastDateOfPreviousMonth = cal.getTime();
看
使用乔达时间
DateMidnight now = new DateMidnight();
DateMidnight beginningOfLastMonth = now.minusMonths(1).withDayOfMonth(1);
DateMidnight endOfLastMonth = now.withDayOfMonth(1).minusDays(1);
System.out.println(beginningOfLastMonth);
System.out.println(endOfLastMonth);
输出:
2012-04-01T00:00:00.000+02:00
2012-04-30T00:00:00.000+02:00
说明: DateMidnight 对象是没有时间信息的 Date 对象,这似乎正是您所需要的。如果不是,请将上述代码中出现的所有 DateMidnight 替换为 DateTime。
好吧,您可以创建一个日历对象,将日期设置为当月的第一天(应该是第一天:P),然后您可以执行两项操作:从您的日历对象中,您可以减去特定的时间段,例如月(这会给你上个月的第一个日期,或者一天,这会给你上个月的最后一天。我没有尝试过,但这将是我的第一步。
还想在 Jigar 的回答中添加一些内容。使用DateFormat
该类以您在问题中指定的格式获取日期:
DateFormat df = DateFormat.getInstance(DateFormat.SHORT);
System.out.println(df.format(firstDateOfPreviousMonth));
System.out.println(df.format(lastDateOfPreviousMonth));
输出:
04/01/12
04/30/12
//在模式中你可以使用你想要的格式。
DateTimeFormatter format = DateTimeFormatter.ofPattern("MM/dd/yyyy");
LocalDate now = LocalDate.now();
String startDate = now.minusMonths(1).with(TemporalAdjusters.firstDayOfMonth()).format(format);
String endDate = now.minusMonths(1).with(TemporalAdjusters.lastDayOfMonth()).format(format);
public static LocalDate getPreviousMonthStartDate() {
return LocalDate.now().minusMonths(1).with(TemporalAdjusters.firstDayOfMonth());
}
public static LocalDate getPreviousMonthLastDate() {
return LocalDate.now().minusMonths(1).with(TemporalAdjusters.lastDayOfMonth());
}
使用 Java.Time 编写代码非常容易。java.time 包具有更好的设计、更多的线程安全、许多支持常用操作的实用方法以及易于使用 Local 和 ZonedDate/Time API 处理时区。
Calendar cal = Calendar.getInstance();
cal.set(Calendar.DATE, 1);
cal.add(Calendar.DAY_OF_MONTH, -1);
Date lastDateOfPreviousMonth = cal.getTime();
cal.set(Calendar.DATE, 1);
Date firstDateOfPreviousMonth = cal.getTime();
public List customizeDate(String month, int year) {
List<String> list = new ArrayList<String>();
try {
String edates = null;
String sdates = null;
if (month.equals("JAN") || month.equals("MAR") ||
month.equals("MAY") || month.equals("JUL") ||
month.equals("AUG") || month.equals("OCT") ||
month.equals("DEC")) {
String s1 = "01";
String s2 = "31";
String sdate = s1 + "-" + month + "-" + year;
System.out.println("Startdate" + sdate);
SimpleDateFormat sd = new SimpleDateFormat("dd-MMM-yyyy");
Date ed = sd.parse(sdate);
sdates = sd.format(ed);
System.out.println("ed" + ed + "------------" + sdates);
String endDate = s2 + "-" + month + "-" + year;
System.out.println("EndDate" + endDate);
SimpleDateFormat s = new SimpleDateFormat("dd-MMM-yyyy");
Date d = s.parse(endDate);
edates = s.format(d);
System.out.println("d" + d + "------------" + edates);
} else if (month.equals("APR") || month.equals("JUN") ||
month.equals("SEP") || month.equals("NOV")) {
String s3 = "01";
String s4 = "30";
String sdate = s3 + "-" + month + "-" + year;
System.out.println("Startdate" + sdate);
SimpleDateFormat sd = new SimpleDateFormat("dd-MMM-yyyy");
Date ed = sd.parse(sdate);
sdates = sd.format(ed);
System.out.println("ed" + ed + "------------" + sdates);
String endDate = s4 + "-" + month + "-" + year;
System.out.println("EndDate" + endDate);
SimpleDateFormat s = new SimpleDateFormat("dd-MMM-yyyy");
Date d = s.parse(endDate);
edates = s.format(d);
System.out.println("d" + d + "------------" + edates);
} else {
if (year % 4 == 0 && year % 100 != 0 || year % 400 == 0) {
System.out.println("Leap year");
if (month.equals("FEB")) {
String s5 = "01";
String s6 = "29";
String sdate = s5 + "-" + month + "-" + year;
System.out.println("Startdate" + sdate);
SimpleDateFormat sd =
new SimpleDateFormat("dd-MMM-yyyy");
Date ed = sd.parse(sdate);
sdates = sd.format(ed);
System.out.println("ed" + ed + "------------" +
sdates);
String endDate = s6 + "-" + month + "-" + year;
System.out.println("EndDate" + endDate);
SimpleDateFormat s =
new SimpleDateFormat("dd-MMM-yyyy");
Date d = s.parse(endDate);
edates = s.format(d);
System.out.println("d" + d + "------------" + edates);
}
} else {
System.out.println("Not a leap year");
String s7 = "01";
String s8 = "28";
String sdate = s7 + "-" + month + "-" + year;
System.out.println("Startdate" + sdate);
SimpleDateFormat sd = new SimpleDateFormat("dd-MMM-yyyy");
Date ed = sd.parse(sdate);
sdates = sd.format(ed);
System.out.println("ed" + ed + "------------" + sdates);
String endDate = s8 + "-" + month + "-" + year;
System.out.println("EndDate" + endDate);
SimpleDateFormat s = new SimpleDateFormat("dd-MMM-yyyy");
Date d = s.parse(endDate);
edates = s.format(d);
System.out.println("d" + d + "------------" + edates);
}
}
list.add(edates);
list.add(sdates);
} catch (Exception e) {
System.err.println(e.getMessage());
}
return list;
}
}