2つの日付の間に日付のリストを取得する方法? [複製] -- java フィールド と android フィールド と jodatime フィールド 関連 問題

How to get list of dates between two dates? [duplicate]












1
vote

問題

日本語

私のアプリケーションユーザーの listview から日付を選択する必要があります。問題はこのリストを生成しています。例えば、私は 2010-2013 またはの間のすべての日付が必要です(期間 、<強い>年)。そのデータを取得できる方法はありますか?

例: 私は 01.01.2013 - 10.01.2013

の間に日付が必要です
  1. 01.01.2013
  2. 02.01.2013
  3. 03.01.2013
  4. 04.01.2013
  5. 05.01.2013
  6. 06.01.2013
  7. 07.01.2013
  8. 08.01.2013
  9. 09.01.2013
  10. 10.01.2013
  11. 事前感あり

英語

In my application user should select date from listview. The problem is generating this list. For example I need all dates between 2010-2013 or June-August (period maybe day, month, year). Is there any method that allows to get that data?

Example: I need dates between 01.01.2013 - 10.01.2013

  1. 01.01.2013
  2. 02.01.2013
  3. 03.01.2013
  4. 04.01.2013
  5. 05.01.2013
  6. 06.01.2013
  7. 07.01.2013
  8. 08.01.2013
  9. 09.01.2013
  10. 10.01.2013

Thanks in advance

</div
        
 
 

回答リスト

4
 
vote
vote
ベストアンサー
 

list の場合、

<事前> <コード> public static List<LocalDate> datesBetween(LocalDate start, LocalDate end) { List<LocalDate> ret = new ArrayList<LocalDate>(); for (LocalDate date = start; !date.isAfter(end); date = date.plusDays(1)) { ret.add(date); } return ret; }

注意: end には含まれます。 exclude にしたい場合は、ループ内の条件を date.isBefore(end) に変更するだけです。

Iterable<LocalDate> のみ必要な場合は、リストを作成するのではなく、これを非常に効率的に行うために独自のクラスを書くことができます。あなたが公正な程度の入れ子を気にしなかったならば、あなたはこれを匿名クラスで行うことができました。たとえば(未テスト):

<事前> <コード> public static Iterable<LocalDate> datesBetween(final LocalDate start, final LocalDate end) { return new Iterable<LocalDate>() { @Override public Iterator<LocalDate> iterator() { return new Iterator<LocalDate>() { private LocalDate next = start; @Override public boolean hasNext() { return !next.isAfter(end); } @Override public LocalDate next() { if (next.isAfter(end)) { throw NoSuchElementException(); } LocalDate ret = next; next = next.plusDays(1); return ret; } @Override public void remove() { throw new UnsupportedOperationException(); } }; } }; }
 

For a list you could just do:

public static List<LocalDate> datesBetween(LocalDate start, LocalDate end) {     List<LocalDate> ret = new ArrayList<LocalDate>();     for (LocalDate date = start; !date.isAfter(end); date = date.plusDays(1)) {         ret.add(date);     }     return ret; } 

Note, that will include end. If you want it to exclude the end, just change the condition in the loop to date.isBefore(end).

If you only need an Iterable<LocalDate> you could write your own class to do this very efficiently rather than building up a list. You could do this with an anonymous class, if you didn't mind a fair degree of nesting. For example (untested):

public static Iterable<LocalDate> datesBetween(final LocalDate start,                                                final LocalDate end) {     return new Iterable<LocalDate>() {         @Override public Iterator<LocalDate> iterator() {             return new Iterator<LocalDate>() {                 private LocalDate next = start;                  @Override                 public boolean hasNext() {                     return !next.isAfter(end);                 }                  @Override                 public LocalDate next() {                     if (next.isAfter(end)) {                         throw NoSuchElementException();                     }                     LocalDate ret = next;                     next = next.plusDays(1);                     return ret;                 }                  @Override                 public void remove() {                     throw new UnsupportedOperationException();                 }             };         }     }; } 
</div
 
 
     
     
3
 
vote

<コード> DatePicker fragmentを使用します。

<事前> <コード> CSS0

これは最初の場所で日付を取得する方が簡単になるはずです。日付範囲に以下のコードを使用してください。

<事前> <コード> CSS1

歓声!

クレジット:これ

 

Use a DatePicker Fragment like this:

private static class DatePickerFragment extends DialogFragment                                       implements DatePickerDialog.OnDateSetListener {      @Override     public Dialog onCreateDialog(Bundle savedInstanceState) {         // Use the current date as the default date in the picker         final Calendar c = Calendar.getInstance();         int year = c.get(Calendar.YEAR);         int month = c.get(Calendar.MONTH);         int day = c.get(Calendar.DAY_OF_MONTH);          // Create a new instance of DatePickerDialog and return it         return new DatePickerDialog(getActivity(), this, year, month, day);     }      @Override     public void onDateSet(DatePicker view, int year, int monthOfYear,             int dayOfMonth) {         // Copy the Date to the EditText set.         dateValue = String.format("%04d", year) + "-" + String.format("%02d", monthOfYear + 1) + "-" + String.format("%02d", dayOfMonth);     }  } 

This should be easier to get dates in the first place. Use the below code for Date Ranges:

public static List<Date> dateInterval(Date initial, Date final) {      List<Date> dates = new ArrayList<Date>();      Calendar calendar = Calendar.getInstance();      calendar.setTime(initial);       while (calendar.getTime().before(final)) {          Date result = calendar.getTime();          dates.add(result);          calendar.add(Calendar.DATE, 1);      }  return dates; } 

Cheers!

Credits: this

</div
 
 

関連する質問

3  FreeMarkerはJoDatimeの統合を持っていますか?  ( Does freemarker have any integration for jodatime ) 
FreeMarkerでJoda DateTimeオブジェクトを簡単にフォーマットする方法はありますか?たとえば、Java日付の場合、文字列やその他のディレクティブを使用できます。 私はTodateを呼び出してJavaの日付を取得できることを知っていますが、私...

2  UTC日付にユーザータイムゾーンを追加する方法  ( How to add user timezone to utc date ) 
UTCにユーザータイムゾーンを追加する方法 私はこののようなUTC日付を取得しています <事前> <コード> DateTimeFormatter formatter = DateTimeFormat.forPattern("yyyy-MM-ddHH:mm:s...

56  Android Java - Joda Dateが遅いです  ( Android java joda date is slow ) 
Joda 1.6.2を使ってAndroid 次のコードは約15秒間ハングします。 <事前> <コード> DateTime dt = new DateTime(); もともとこの投稿を投稿しました Android Java - Joda Date...

1  Joda Time Daysの開始日を含める方法[複製]  ( How to include start date in joda time daysbetween ) 
この質問はすでにここで回答を持っています joda-time の2つの日付から日数 (8回答) 閉じられた ...

2  Jodatime - PimeryFormatter:日/日のみのサフィックス  ( Jodatime periodformatter suffix only for day days ) 
私は日/日のサフィックスを見せるだけでよい、どうやってそれを達成することができますか? それはうまくいきません: java.lang.IllegalStateException:接尾辞を適用するフィールド.. <事前> <コード> privat...

4  Jodatimeを使って残りの日と時間を見つけてください  ( Find remaining day and time using jodatime ) 
JODA時間を使って比較(2日間の残りの日と時間を見つける)を比較したいです。 私はこのような2つの日時オブジェクトを取っています(1つは開始されていることが終了しています) <事前> <コード> DateTime endDate = new DateTi...

2  ジョーダの時間 - 与えられた期間内の期間?  ( Joda time period within a given period of time ) 
私のユースケース - 私は医者です。特定の日に、私は何時間も利用でき、いくつかの利用可能です。オブジェクト期間MyWorkdayを作成したいです。誰かが8 AM-9の予約(つまりPertient Patele1Appointment)を修正すると、その期間はM...

3  Android Java - Joda DateはEclipse / Emulatorが遅いです -  ( Android java joda date is slow in eclipse emulator ) 
私は一連の日付関数を見つけようとしています。 joda のように見えます > http://www.joda.org/joda-time/ 私が必要とするすべてのものをしますが、私が単純なを呼び出すとき <事前> <コード> DateTime dt = n...

15  HibernateでJava Dateの代わりにJODA DateTimeを永続化します  ( Persisting joda datetime instead of java date in hibernate ) 
マイエンティティ現在Java Dateプロパティを含みます。私は日付の操作と計算のためにJODA時間を使い始めています。つまり、私は常に私の日付をJoda DateTimeオブジェクトに変換して再びバックしていることを意味します。 だから私は疑問に思っていたの...

9  Quartz APIとJODA Time APIの関係はありますか?  ( Any relation between quartz api and joda time api ) 
Jodatimeに日付を作成してから、JoDatimeオブジェクトを使用してジョブをスケジュールすることは可能ですか? 1日に特定の期間のタスクを実行するために、Quartz APIの期間JoDaaperiodを与えることができますか? は、任意の方法で2...




© 2022 cndgn.com All Rights Reserved. Q&Aハウス 全著作権所有