当月的开始和结束日期

Lal*_*and 38 java date-manipulation

我需要Java中当前月份的开始日期和结束日期.当JSP页面加载当前月份时,它应该自动计算该月份的开始和结束日期.它应该与年份和月份无关.那是一个月有31天或30天或28天.这也应该满足闰年.你可以帮帮我吗?

例如,如果我在列表框中选择月份,我需要开始日期为1,结束日期为31.

Abh*_*kar 59

你去:

public Pair<Date, Date> getDateRange() {
    Date begining, end;

    {
        Calendar calendar = getCalendarForNow();
        calendar.set(Calendar.DAY_OF_MONTH,
                calendar.getActualMinimum(Calendar.DAY_OF_MONTH));
        setTimeToBeginningOfDay(calendar);
        begining = calendar.getTime();
    }

    {
        Calendar calendar = getCalendarForNow();
        calendar.set(Calendar.DAY_OF_MONTH,
                calendar.getActualMaximum(Calendar.DAY_OF_MONTH));
        setTimeToEndofDay(calendar);
        end = calendar.getTime();
    }

    return Pair.of(begining, end);
}

private static Calendar getCalendarForNow() {
    Calendar calendar = GregorianCalendar.getInstance();
    calendar.setTime(new Date());
    return calendar;
}

private static void setTimeToBeginningOfDay(Calendar calendar) {
    calendar.set(Calendar.HOUR_OF_DAY, 0);
    calendar.set(Calendar.MINUTE, 0);
    calendar.set(Calendar.SECOND, 0);
    calendar.set(Calendar.MILLISECOND, 0);
}

private static void setTimeToEndofDay(Calendar calendar) {
    calendar.set(Calendar.HOUR_OF_DAY, 23);
    calendar.set(Calendar.MINUTE, 59);
    calendar.set(Calendar.SECOND, 59);
    calendar.set(Calendar.MILLISECOND, 999);
}
Run Code Online (Sandbox Code Playgroud)

PS:Pairclass只是一对两个值.


leo*_*loy 29

如果你有选择,你最好避免使用可怕的Java Date API,而是使用Jodatime.这是一个例子:

LocalDate monthBegin = new LocalDate().withDayOfMonth(1);
LocalDate monthEnd = new LocalDate().plusMonths(1).withDayOfMonth(1).minusDays(1);
Run Code Online (Sandbox Code Playgroud)

  • 现在,使用Java 8,您可以使用Java时间:https://docs.oracle.com/javase/8/docs/api/java/time/package-summary.html (3认同)
  • 你可以试试这个:`LocalDate MonthBegin = LocalDate.now().withDayOfMonth(1); LocalDate MonthEnd = LocalDate.now().plusMonths(1).withDayOfMonth(1).minusDays(1);` (2认同)

aia*_*tro 10

从Java 8中尝试LocalDate:

LocalDate today = LocalDate.now();
System.out.println("First day: " + today.withDayOfMonth(1));
System.out.println("Last day: " + today.withDayOfMonth(today.lengthOfMonth()));
Run Code Online (Sandbox Code Playgroud)


Suj*_*mar 7

简单和最好,试试这个

Calendar calendar = Calendar.getInstance();
            calendar.add(Calendar.MONTH, 0);
            calendar.set(Calendar.DATE, calendar.getActualMinimum(Calendar.DAY_OF_MONTH));
            Date monthFirstDay = calendar.getTime();
            calendar.set(Calendar.DATE, calendar.getActualMaximum(Calendar.DAY_OF_MONTH));
            Date monthLastDay = calendar.getTime();

        SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd");
        String startDateStr = df.format(monthFirstDay);
        String endDateStr = df.format(monthLastDay);

        Log.e("DateFirstLast",startDateStr+" "+endDateStr);
Run Code Online (Sandbox Code Playgroud)


小智 5

Calendar c = Calendar.getInstance();
    int year = c.get(Calendar.YEAR);
    int month = c.get(Calendar.MONTH);
    int day = 1;
    c.set(year, month, day);
    int numOfDaysInMonth = c.getActualMaximum(Calendar.DAY_OF_MONTH);
    System.out.println("First Day of month: " + c.getTime());
    c.add(Calendar.DAY_OF_MONTH, numOfDaysInMonth-1);
    System.out.println("Last Day of month: " + c.getTime());
Run Code Online (Sandbox Code Playgroud)