2017-09-06 8 views
-4

私は全日を含む月を見たいと思う。なぜCalendar.SEPTEMBERが機能しないのですか?

含ま
private void createRandomData(InMemoryCursor cursor) { 
    List<Object[]> data = new ArrayList<>(); 
    Calendar today = Calendar.getInstance(TimeZone.getDefault(), Locale.getDefault()); 
    today.set(Calendar.HOUR_OF_DAY,0); 
    today.set(Calendar.MINUTE, 0); 
    today.set(Calendar.SECOND, 0); 
    today.set(Calendar.MILLISECOND, 0); 
    mStart = (Calendar) today.clone(); 
    mStart.add(Calendar.SEPTEMBER, -5); 
    while (mStart.compareTo(today) <= 0) { 
     data.add(createItem(mStart.getTimeInMillis())); 
     mStart.add(Calendar.SEPTEMBER, 1); 
    } 
    cursor.addAll(data); 
} 

私はCalendar.SEPTEMBER(または他の月)を書くとき、私はCalendar.SEPTEMBERに赤い線を参照してください。

のいずれかを指定します。Calendar.ERA、Calendar.YEAR、カレンダー.MONTH、Calendar.WEEK_OF_YEAR、Calendar.WEEK_OF_MONTH、Calendar.DATE、Calendar.DAY_OF_MONTH、Calendar.DAY_OF_YEAR、Calendar.DAY_OF_WEEK、Calendar.DAY_OF_WEEK_IN_MONTH、Calendar.AM_PM、Calendar.HOUR、Calendar.HOUR_OF_DAY、Calendar.MINUTE、Calendar.SECOND (Ctrl + F1) この検査では、さまざまなsu pportアノテーション(RequiresPermissionやUiThreadなど)を使用し、注釈で指定されているとおりにAPIを正しく使用していない呼び出しを正しくフラグ付けします。この検査でフラグが立てられたエラーの例: 異なるタイプ(R.dimenなど)を必要とするAPIに間違った種類のリソース整数(R.stringなど)を渡します。 RGB整数値を期待するメソッドへのリソース色基準を渡すマニフェスト にその許可を宣言せずに許可を必要とするメソッドを呼び出すこと を必要とする方法で(スーパー経由で)オーバーライドされたメソッドを呼び出すために忘れ 。 ...など。 see

私が使用

:詳細については、私は赤い線にもかかわらず、それを実行すると、それはのような複雑な日付を示しdeveloper.android.com/tools/debugging/annotations.html

でドキュメントを参照してください。 GitHubのこのライブラリ:https://github.com/jruesga/timeline-chart-view ライブラリに関連する問題ですか?それともJavaカレンダーですか?

+3

あなたは既に答えられています: 'Calendar.ERA、Calendar.YEAR、Calendar.MONTH、Calendar.WEEK_OF_YEAR、Calendar.WEEK_OF_MONTH、Calendar.DATE、Calendar.DAY_OF_MONTH、Calendar.DAY_OF_YEAR、Calendar.DAY_OF_WEEKのいずれかである必要があります。 、Calendar.DAY_OF_WEEK_IN_MONTH、Calendar.AM_PM、Calendar.HOUR、Calendar.HOUR_OF_DAY、Calendar.MINUTE、Calendar.SECOND、Calendar.MILLISECOND、Calendar.ZONE_OFFSET、Calendar.DST_OFFSET' –

+0

私が望むように見えないのですか?@ModularSynth – BatuZ

+0

利用可能なオプションにリストされていますか? –

答えて

2

互換性のないオプションを使用しています。 Calendar.add()の最初のパラメータは、エラーで説明されているオプションで定義されている時間単位(日、週、時間など)です。 Calendar.SEPTEMBERは、時間の単位ではない、それは、典型的には、代わりに、set()方法で使用される9月のMONTH表す便利な定数です。

あなたがヶ月を反復していると仮定すると、あなたの代わりにCalendar.MONTHが必要になります。

2

@Michael's answerで説明したように、addメソッドではCalendar.SEPTEMBERを使用できません。

指定した月数を加算または減算する場合は、Calendar.MONTHを使用してください。日を追加/減算する場合は、Calendar.DAY_OF_MONTHなどを使用します。

Calendar APIは時々(ほとんどの場合、IMO)混乱し、lots of problemsdesign issuesです。

は、Androidには、より良い代替手段があります:あなたはThreeTen Backport、Javaの8の新しい日付/時間の授業のための偉大なバックポートを使用することができます。それを動作させるには、ThreeTenABP(詳細はhereの使い方)が必要です。

Calendarがデフォルトのタイムゾーンに設定されているので、置き換えの候補はorg.threeten.bp.ZonedDateTime(これは特定のタイムゾーンの日付と時刻を表します)です。まず、now()メソッドを使用します(JVMのデフォルトのタイムゾーンで現在の日付/時刻が使用されます)。次に、org.threeten.bp.LocalTimeを使用して時刻を深夜に設定します。

また、私は5ヶ月、現在の日付より前の日付を取得するにはminusMonthsメソッドを使用して、ループ内で私がtoInstant()メソッドを使用し、ミリ秒の値を取得するには、次の月に取得するplusMonths方法:

// get today at default timezone, at midnight 
ZonedDateTime today = ZonedDateTime.now().with(LocalTime.MIDNIGHT); 
// 5 months ago 
ZonedDateTime start = today.minusMonths(5); 
while (start.compareTo(today) <= 0) { 
    data.add(createItem(start.toInstant().toEpochMilli())); 
    start = start.plusMonths(1); 
} 

たとえば、月の代わりに分を加算または減算する場合は、minusMinutesと​​のメソッドを使用できます。すべてのオプションを表示するには、別のユニットの他の方法(時間、日など)、check the javadocがあります。


デフォルトのタイムゾーンを使用することの問題点はそのcan be changed without notice, even at runtimeあるので、それは常にあなたが使用しているどちらそれが明示的にする方が良いでしょう。 Calendar

、あなたがTimeZone.getTimeZone(zoneName)使用することができます。

Calendar todayCal = Calendar.getInstance(TimeZone.getTimeZone("Europe/London"), Locale.getDefault()); 

そしてThreeTenバックポートして、あなたがZoneId.of(zoneName)を使用することができます。

ZonedDateTime today = ZonedDateTime.now(ZoneId.of("Europe/London")).with(LocalTime.MIDNIGHT); 

上記の例では、私がEurope/Londonを使用していますが、それを変更することができますあなたが望む任意のタイムゾーンに。 APIは、America/Sao_PauloまたはEurope/Berlinのように、常にRegion/Cityの形式のIANA timezones namesを使用します。 ambiguous and not standardであるため、3文字の略語(CSTまたはなど)は使用しないでください。

ZoneId.getAvailableZoneIds()またはTimeZone.getAvailableIDs()を呼び出すと、使用可能なタイムゾーンのリストを取得できます(システムに最も適したものを選択できます)。

関連する問題