2016-09-21 238 views
-2

我需要帮助获取当年开始和结束日期,去年和明年如何在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); 
    } 

回答

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,FROM日期):它可以让你从你通过的日期在明年(输入1)

GetYearSlot(0,fromDate):从您通过的日期开始计算当年(输入0)

GetYearS很多(-1,FROM日期):它给你上一年度之日起您传递(输入-1)

1

假设你不能使用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 
0

java.time

您现在使用由java.time类取代了麻烦的旧的遗留日期时间类。

首先获取当前日期。

LocalDate类代表没有时间和不带时区的仅有日期的值。

时区对确定日期至关重要。对于任何特定的时刻,日期因地区而异。例如,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); 

通常在日期时间工作中,我们使用Half-Open方法表示一段时间。在这种方法中,开头是,包括,而结尾是,独家。因此,一年将从一月一号开始,并延续到下一年的一月一号,但不包括在内。

如果在Java 8上,您可以包含ThreeTen-Extra项目及其Interval类来表示时间跨度。

否则自己动手。

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

如果您确实需要一年的最后一天,您可以从下一年的第一天减去一天。更容易的是使用TemporalAdjusters类中定义的TemporalAdjuster

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.time

java.time框架是建立在Java 8和更高版本。这些类代替了令人讨厌的旧日期时间类,例如java.util.Date,.Calendar,& java.text.SimpleDateFormat

Joda-Time项目现在位于maintenance mode,建议迁移到java.time。请参阅Oracle Tutorial。并搜索堆栈溢出了很多例子和解释。

大部分的java.time功能后移植到Java 6 和ThreeTenABP还适于Android(见How to use…)。

ThreeTen-Extra项目扩展java.time与其他类。这个项目是未来可能增加java.time的一个试验场。您可以在这里找到一些有用的类,如Interval,YearWeek,YearQuartermore

相关问题