有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如何在Android中获取一年的开始日期和结束日期?

我需要帮助获取本年度、去年和明年的开始和结束日期

下面是我的代码:这个代码可以正常工作一个月,我可以修改它一年吗

注意:此代码仅作为示例

   protected void getDataByMonths(int currentDayOfMonth) {

        Calendar calendar = Calendar.getInstance();

        int year = calendar.get(Calendar.YEAR);

        int month;

        if (currentDayOfMonth >= 2) {

            month = calendar.get(Calendar.MONTH) + 1;
        } else {

            month = calendar.get(Calendar.MONTH) - currentDayOfMonth;
        }
        int day = 1;

        calendar.set(year, month, day);

        DateFormat df = new SimpleDateFormat("MM/dd/yyyy");

        int numOfDaysInMonth = calendar.getActualMaximum(Calendar.DAY_OF_MONTH);

        String firstday = String.valueOf(df.format(calendar.getTime()));

        calendar.add(Calendar.DAY_OF_MONTH, numOfDaysInMonth - 1);

        String lastday = String.valueOf(df.format(calendar.getTime()));


        String result = getButtonName(button) + " From :" + getDateInMonthFormat(firstday) + " " + "To :" + getDateInMonthFormat(lastday);

        finalcontacts = mySqliteDBhelper.getContactsBetweenRange(button, getDateInMilliseconds(firstday),  getDateInMilliseconds(lastday));

        finalstatus.setText(result);
    }

共 (3) 个答案

  1. # 1 楼答案

    爪哇。时间

    您使用的是麻烦的旧遗留日期时间类,现在已被java取代。时间课

    首先获取当前日期

    ^{}类表示一个只包含日期的值,不包含一天中的时间和时区

    时区对确定日期至关重要。在任何一个特定的时刻,世界各地的日期因地区而异。例如,在Paris France午夜后几分钟是新的一天,而在Montréal Québec仍然是“昨天”

    ZoneId z = ZoneId.of( “America/Montreal” );
    LocalDate today = LocalDate.now( z );
    

    使用Year将全年表示为对象

    Year thisYear = Year.from( today );
    Year nextYear = thisYear.plusYears( 1 );
    Year lastYear = thisYear.minusYears( 1 );
    

    通常在日期时间工作中,我们使用半开放方法表示一段时间。在这种方法中,开始是包含的,而结束是独占的。所以一年从1月1日开始,一直持续到下一年的1月1日,但不包括在内

    如果在Java8上,可以包含ThreeTen-Extra项目及其^{}类来表示时间跨度

    否则你自己做

    LocalDate thisYearStart = thisYear.atDay( 1 );
    LocalDate lastYearStart = lastYear.atDay( 1 );
    LocalDate nextYearStart = nextYear.atDay( 1 );
    

    如果你真的需要一年的最后一天,你可以从下一年的第一天减去一天。更简单的方法是使用^{}类中定义的^{}

    LocalDate thisYearFirstDay = today.with( TemporalAdjusters.firstDayOfYear() );
    LocalDate thisYearLastDay = today.with( TemporalAdjusters.lastDayOfYear() );
    
    LocalDate nextYearFirstDay = thisYearLastDay.plusDays( 1 );
    LocalDate nextYearLastDay = nextYearFirstDay.with( TemporalAdjusters.lastDayOfYear() );
    
    LocalDate lastYearLastDay = thisYearFirstDay.minusDays( 1 );
    LocalDate lastYearFirstDay = lastYearLastDay.with( TemporalAdjusters.firstDayOfYear() );
    

    关于java。时间

    java.time框架内置于Java8及更高版本中。这些类取代了^{}^{}、&^{}

    目前位于maintenance modeJoda-Time项目建议迁移到java。时间到了

    要了解更多信息,请参阅Oracle Tutorial。并在Stack Overflow中搜索许多示例和解释

    java的大部分内容。时间功能被向后移植到Java 6&;7 in ThreeTen-Backport并进一步适应Androidin ThreeTenABP(见How to use…

    ThreeTen-Extra项目扩展了java。有额外课程的时间。这个项目是java未来可能增加的一个试验场。时间你可以在这里找到一些有用的类,比如^{}^{}^{}more

  2. # 2 楼答案

    检查一下:

    public static String GetYearSlot(int option,String inputDate)
        {
            SimpleDateFormat sdf = new SimpleDateFormat("dd MMM yyyy",java.util.Locale.getDefault());
            Date myDate = null;
            try
            {
                myDate = sdf.parse(inputDate);
            }
            catch(Exception ex)
            {
                ex.printStackTrace();
            }
            Calendar calendar = Calendar.getInstance();
            calendar.setTime(myDate);
    
            calendar.add(Calendar.YEAR, option);
            calendar.set(Calendar.DAY_OF_YEAR, 1);
            Date YearFirstDay = calendar.getTime();
            calendar.set(Calendar.MONTH, 11);
            calendar.set(Calendar.DAY_OF_MONTH, 31);
            Date YearLastDay = calendar.getTime();
    
            return sdf.format(YearFirstDay)+"-"+sdf.format(YearLastDay);
        }
    

    如何使用:

    GetYearSlot(1,fromDate):它提供从您通过的日期算起的下一年(输入1)

    GetYearSlot(0,fromDate):它提供从您通过的日期算起的当前年份(输入0)

    GetYearSlot(-1,fromDate):它提供从您过去的日期算起的上一年(输入-1)

  3. # 3 楼答案

    假设您不能使用Java 8,下面是如何做到的:

    SimpleDateFormat df = new SimpleDateFormat("MM/dd/yyyy");
    
    // Create first day of year
    Calendar firstDayOfCurrentYear = Calendar.getInstance();
    firstDayOfCurrentYear.set(Calendar.DATE, 1);
    firstDayOfCurrentYear.set(Calendar.MONTH, 0);
    System.out.println(df.format(firstDayOfCurrentYear.getTime()));
    
    // Create last day of year
    Calendar lastDayOfCurrentYear = Calendar.getInstance();
    lastDayOfCurrentYear.set(Calendar.DATE, 31);
    lastDayOfCurrentYear.set(Calendar.MONTH, 11);
    System.out.println(df.format(lastDayOfCurrentYear.getTime()));
    
    // Create first day of next year
    Calendar firstDayOfNextYear = Calendar.getInstance();
    firstDayOfNextYear.add(Calendar.YEAR, 1);
    firstDayOfNextYear.set(Calendar.DATE, 1);
    firstDayOfNextYear.set(Calendar.MONTH, 0);
    System.out.println(df.format(firstDayOfNextYear.getTime()));
    
    // Create last day of next year
    Calendar lastDayOfNextYear = Calendar.getInstance();
    lastDayOfNextYear.add(Calendar.YEAR, 1);
    lastDayOfNextYear.set(Calendar.DATE, 31);
    lastDayOfNextYear.set(Calendar.MONTH, 11);
    System.out.println(df.format(lastDayOfNextYear.getTime()));
    

    输出:

    01/01/2016
    12/31/2016
    01/01/2017
    12/31/2017