2016-06-29 30 views
1

私はアンドロイドアプリケーションを開発しており、サーバーから開始日と終了日を取得しています。Android(間隔の10日間の日付のリストを見つける方法)

例:20-06-2016及び20-06-2017

私は、10日の間隔でこれら2つの日付の間の日付のリストを見つけたいです。土曜日と日曜日を除く例えば

:次の日は2016年4月7日(土曜日と日曜日を除く)でなければならないので 20-06-2016が月曜日です。等々。

その後(日付のリストから)日付ごとに、特定の日付のカレンダーに予定を追加して、ユーザーに何らかのメッセージを通知できるようにします。

イベントをカレンダーに追加し、特定の時間にユーザーに通知するコードを記述しました。だから、私はちょうど日付のリストが欲しい。

私を助けてください。

ありがとうございます。

+1

質問(**「なぜ、このコードが動作しない?」**は)* *希望の動作*、*特定の問題やエラーを含める必要がありますし、 *それを再現するために必要な最短コード** **質問自体に**。 **明確な問題文**のない質問は他の読者には役に立たない。参照:[最小限で完全で検証可能なサンプルの作成方法](http://stackoverflow.com/help/mcve) –

+0

@chetan私のコードを確認してください、それは本当に動作します:) – Drv

答えて

4

私は何とか管理します。ここで

はデバッグの助けを求めているコード

public List<String> findDates(String startDate,String endDate) throws ParseException { 
     List<Date> dates = new ArrayList<Date>(); //this list will store all the dates from startDate to endDate 
     List<String> intervalDates = new ArrayList<>(); //this list will store dates excluding saturday and sunday. 

     DateFormat formatter; 
     formatter = new SimpleDateFormat("MM-dd-yyyy"); 

     Date sDate = (Date) formatter.parse(startDate); 
     Date eDate = (Date) formatter.parse(endDate); 
     long interval = 24 * 1000 * 60 * 60; // 1 day in millis 
     long endTime = eDate.getTime(); // create your endtime here, possibly using Calendar or Date 
     long curTime = sDate.getTime(); 
     while (curTime <= endTime) { 
      dates.add(new Date(curTime)); 
      curTime += interval; //adding the interval of 1day 
     } 

     for (int i = 0; i < dates.size(); i++) { 
      Date lDate = (Date) dates.get(i); // getting each date from the list of all dates to find the day name 
      String ds = formatter.format(lDate); 

      Date day = formatter.parse(ds); 
      DateFormat dayFormat = new SimpleDateFormat("EEEE"); 
      String dy = dayFormat.format(day); // to get the day name 

      if (dy.equalsIgnoreCase("Saturday") || dy.equalsIgnoreCase("Sunday")) { 
       continue; 
      } 
      intervalDates.add(ds); //adding date excluding saturday and sunday. 

      //Log.d(TAG, "findDates: Date is:" + ds + " " + dy); 
     } 
     return intervalDates; 
    } 
1

以下のコードの出力は次のようになります。

How to add one day to a date?

20-06-2016
2016年4月7日

私はそれが

import java.text.ParseException; 
import java.text.SimpleDateFormat; 
import java.util.Date; 

public class HelloWorld{ 

    public static void main(String []args) throws ParseException{ 
     String str = "20-06-2016"; 
     SimpleDateFormat formatter = new SimpleDateFormat("dd-MM-yyyy"); 
     Date date = formatter.parse(str); 
     String dater = formatter.format(date); 
     System.out.println(dater); 
     Date dateNew = new Date(date.getYear(), date.getMonth(), date.getDate() +14); 
     System.out.println(formatter.format(dateNew)); 
    } 
} 

ソースを役に立てば幸い

How to parse a date?

0

emrah単純なケースでは答えはOKですが、日曜日と土曜日を除外する必要がある場合は、Calendarクラスのインスタンスを使用することをお勧めします。たとえば:

SimpleDateFormat format = new SimpleDateFormat("dd-MM-yyyy", Locale.US); 

    Calendar calendar = Calendar.getInstance(); 
    calendar.setTime(format.parse("26-06-2016")); 
    int dow = calendar.get(Calendar.DAY_OF_WEEK); 
    if (dow == Calendar.SATURDAY) 
     calendar.add(Calendar.DATE, 2); 
    else if (dow == Calendar.SUNDAY) 
     calendar.add(Calendar.DATE, 1); 

    int intervalCount = 10; 
    // List of dates 
    List<Date> dates = new ArrayList<>(intervalCount); 
    for(int i = 0; i < intervalCount; i++) { 
     // Two weeks, I guess 
     calendar.add(Calendar.DATE, 14); 
     dates.add(calendar.getTime()); 
    } 

    for (Date date : dates) { 
     Log.e(TAG, format.format(date)); 
    } 

Calendar documentation

0

コード以下しようとすると、それが助けなければならない:

public class MainActivity extends AppCompatActivity { 

public static final SimpleDateFormat DATE_FORMAT = new SimpleDateFormat("dd-MM-yyyy"); 
int no_of_days = 0; 
List<Date> dates = null; 
RecyclerView recycler_view; 
Calendar calendar = null; 

RecyAdapter recyAdapter = null; 
LinearLayoutManager linearLayoutManager = null; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    recycler_view = (RecyclerView) findViewById(R.id.recycler_view); 

    dates = new ArrayList<>(); 

    linearLayoutManager = new LinearLayoutManager(MainActivity.this,LinearLayoutManager.VERTICAL,false); 
    recycler_view.setLayoutManager(linearLayoutManager); 
    no_of_days = getNoOfDays("20-06-2016", "20-08-2016"); 

    calendar = Calendar.getInstance(); 
    try { 
     calendar.setTime(new SimpleDateFormat("dd-MM-yyyy").parse("20-06-2016")); 
    } catch (ParseException e) { 
     e.printStackTrace(); 
    } 

    for (int i = 0; i < no_of_days; i++) { 
     calendar.add(Calendar.DATE, 10); 
     if (calendar.get(Calendar.DAY_OF_WEEK) == Calendar.SATURDAY 
       || calendar.get(Calendar.DAY_OF_WEEK) == Calendar.SUNDAY) { 
     } else { 
      dates.add(calendar.getTime()); 
     } 
    } 

    recyAdapter = new RecyAdapter(MainActivity.this, dates); 
    recycler_view.setAdapter(recyAdapter); 

} 

public int getNoOfDays(String Created_date_String, String Expire_date_String) { 

    Date Created_convertedDate = null, Expire_CovertedDate = null, todayWithZeroTime = null; 
    try { 
     Created_convertedDate = DATE_FORMAT.parse(Created_date_String); 
     Expire_CovertedDate = DATE_FORMAT.parse(Expire_date_String); 

    } catch (ParseException e) { 
     e.printStackTrace(); 
    } 

    Calendar createdDay = Calendar.getInstance(); 
    createdDay.setTime(Created_convertedDate); 

    Calendar expireDay = Calendar.getInstance(); 
    expireDay.setTime(Expire_CovertedDate); 

    long diff = createdDay.getTimeInMillis() - expireDay.getTimeInMillis(); 

    long days = (diff/(24 * 60 * 60 * 1000)); 

    return (Math.abs((int) days))/10; 
} 
} 

そのアダプタクラスは以下の通りです:

public class RecyAdapter extends RecyclerView.Adapter<RecyAdapter.ViewHolder> { 


Context context; 
List<Date> dates = null; 

public RecyAdapter(Context context, List<Date> dates) { 

    this.context = context; 
    this.dates = dates; 
} 


@Override 
public RecyAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { 
    View view = LayoutInflater.from(context).inflate(R.layout.row_item, parent, false); 
    ViewHolder viewHolder = new ViewHolder(view); 
    return viewHolder; 
} 

@Override 
public void onBindViewHolder(final RecyAdapter.ViewHolder holder, int position) { 

    holder.txt.setText(MainActivity.DATE_FORMAT.format(dates.get(position))); 

} 

@Override 
public int getItemCount() { 
    return dates.size(); 
} 

class ViewHolder extends RecyclerView.ViewHolder { 
    TextView txt; 

    public ViewHolder(View itemView) { 
     super(itemView); 
     txt = (TextView) itemView.findViewById(R.id.txt); 
    } 
} 

} 

とそのレイアウトは以下のとおりです。activity_main 。このタスクを達成するために、XML

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:tools="http://schemas.android.com/tools" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:paddingBottom="@dimen/activity_vertical_margin" 
android:paddingLeft="@dimen/activity_horizontal_margin" 
android:paddingRight="@dimen/activity_horizontal_margin" 
android:paddingTop="@dimen/activity_vertical_margin" 
tools:context="fitness.vario.stacklistofdates.MainActivity"> 

<android.support.v7.widget.RecyclerView 
    android:id="@+id/recycler_view" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:layout_gravity="center_horizontal" /> 
</RelativeLayout> 

row_item.xmlは

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="match_parent" 
android:layout_height="wrap_content" 
android:orientation="vertical"> 

<TextView 
    android:layout_width="match_parent" 
    android:layout_height="20dp" 
    android:id="@+id/txt"/> 

</LinearLayout> 
関連する問題