2016-09-21 10 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、fromDateから):それはあなたが渡された日付(入力1)から来年あなたを与える

GetYearSlot(0、fromDate):渡された日付から現在の年を返します(入力0)

GetYearS多くの(-1、fromDateから):あなたがJava 8を使用することができないと仮定すると、それはあなたが渡された日付(入力-1)から前年度あなたを与える

1

は、ここでそれを行うことができる方法です:

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アプローチを使用して時間を表します。このアプローチでは、開始はを含めてであり、終了はの排他的です。したがって、1月は最初に1月に始まり、翌年の1月1日には実行されますが、これには含まれません。

Java 8の場合は、ThreeTen-Extraプロジェクトとその時間幅を表すIntervalクラスを含めることができます。

それ以外の場合は、自分で解決してください。

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

本当に年の最後の日が必要な場合は、翌年の最初の日から1日を引くことができます。さらに簡単にはをTemporalAdjustersクラスで定義しています。 java.timeについて

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 8に組み込まれており、後にされています。これらのクラスは、java.util.Date,.Calendar、& java.text.SimpleDateFormatなどの面倒な古い日時クラスに取って代わります。

Joda-Timeプロジェクトは、今maintenance modeで、java.timeへの移行をアドバイスします。

Oracle Tutorialを参照して、詳細をご覧ください。そして、多くの例と説明のためにStack Overflowを検索してください。

java.time機能ThreeTen-BackportでJava 6 & 7に戻って、移植、さらにThreeTenABPAndroidに適合されているの多く(How to use…を参照)。

ThreeTen-Extraプロジェクトは、追加のクラスでjava.timeを拡張します。このプロジェクトは、将来のjava.timeへの追加の可能性を証明する土台です。ここでは、IntervalYearWeekYearQuartermoreなどの便利なクラスがあります。

関連する問題