5

私のアプリでは、現在の日付と月、および現地時間(currentTimeZone時間)を取得したいと考えています。その値に応じて、いくつかの情報が表示されます。

私はいくつかの解決策を読み、以下を使用しました:

Calendar c = Calendar.getInstance(); 
            int day=c.get(Calendar.DATE);
            int month=c.get(Calendar.MONTH);

またはこれ

Time today = new Time(Time.getCurrentTimezone());
            today.setToNow();
            int day2=today.monthDay;
            int month2=today.month;

私の質問は次のとおりです。

1)結果を考慮すると、どちらがより「安定」していますか?問題ないということです。

2)さらに、両方ともTimeZoneを考慮しましたか?2つ目はそうだと思いますが、カレンダーはどうですか?

3)私が見つけたこのコードを試しました:

SimpleDateFormat s = new SimpleDateFormat("ddMMyyyyhhmmss");
            String format = s.format(new Date());

そして、Date()には引数が必要であるというエラーが表示されます。すべての答えで彼らはそれをそのように使うので奇妙です。

なにが問題ですか?

4)私に何を使うように提案しますか?私が欲しいのは、現在の月、日付、時間とメモリに保存されているものとの単純な比較です。(たとえば、1月29日の場合は、そのイベントを表示します。午前19時の場合は、通知を送信します。)

4

4 に答える 4

14

1)結果を考慮すると、どちらがより「安定」していますか?問題ないということです。

Calendarこれらは両方とも安定しており、特にJDK1.1以降のJavaAPIで非常によくテストされています。また、のドキュメントからTime

CalendarクラスとGregorianCalendarクラスの代替。Timeクラスのインスタンスは、2番目の精度で指定された瞬間を表します。これはstructtmをモデルにしており、実際、structtmを使用してほとんどの機能を実装しています。

Time、imhoは、それよりもはるかに簡単に作業Calendarできます。

2)さらに、両方ともTimeZoneを考慮しましたか?2つ目はそうだと思いますが、カレンダーはどうですか?

はい、彼らはやる。TimeZoneusingを指定できますCalendar.getInstance(java.util.TimeZone)。それ以外の場合は、デフォルトのものが使用されます。

3)私が見つけたこのコードを試しました:

コードは問題なく動作します。たとえば、のnew java.util.Date()代わりにを使用していることを確認してください。java.sql.Date

4)私に何を使うように提案しますか?私が欲しいのは、現在の月、日付、時間とメモリに保存されているものとの単純な比較です。(たとえば、1月29日の場合は、そのイベントを表示します。午前19時の場合は、通知を送信します。)

それは本当に個人的な選択の問題です。たとえば、今日が1月29日であるかどうかをCalendar比較するには、次のように使用できます。

Calendar today = Calendar.getInstance();
int dayOfMonth = today.get(Calendar.DAY_OF_MONTH);
int month = today.get(Calendar.MONTH);
if (month == Calendar.JANUARY && dayOfMonth == 29) {
  // January 29
}
于 2012-09-08T22:40:04.040 に答える
1

私のAndroidアプリでは、SQLiteに日付を保存しています。ただし、SQLiteはDateデータ型を受け入れません。したがって、 YYYY-MM-DDの形式を使用するために、このように文字列に変換します。

            Time today = new Time(Time.getCurrentTimezone());
            today.setToNow();
            int year = today.year;
            int month = today.month;
            int day = today.monthDay;

            Calendar gregorianCalendar = new GregorianCalendar(year, month, day);
            String entryDate =  gregorianCalendar.get(Calendar.YEAR) + "-" + gregorianCalendar.get(Calendar.MONTH) + "-" + gregorianCalendar.get(Calendar.DAY_OF_MONTH);

そしてそれはうまくいきます。パフォーマンスの違いはおそらく過失であるため、私は気にしません。

于 2013-07-17T18:18:01.347 に答える
1
于 2018-02-06T02:51:54.620 に答える
0

android.text.format.TimeはAPIレベル22で非推奨になりました。代わりにGregorianCalendarを使用してください。

http://developer.android.com/reference/android/text/format/Time.htmlにアクセスします

私が知っているように、Timeクラスにはいくつかの問題があります。たとえば、引数が1970.1.1のjulianDayより小さい場合、Time.setJulianDay(int julianDay)が間違った値を返します。

また、1987年4月から1991年の間にいくつかのバグも発生します(多分Time.set(長いミリ秒)、私は覚えていません)。

于 2015-03-21T15:17:35.480 に答える