2つの日付間の分数を取得する必要があります。私はJodaが最も適していることを知っていますが、これはAndroidプロジェクトのためのものです。そのため、できるだけ小さな外部ライブラリを使用することを好みます。そして、私が構築しているアプリは、外科的に正確な計算。
しかし、私が使用しているコードは機能していないようです。 「11/21/2011 7:00:00 AM」と「11/21/2011 1:00:00 PM」の間の分数(360分)を取得しようとしていますが、コードI '0を使用して返します:
int diff = minutesDiff(GetItemDate("11/21/2011 7:00:00 AM"), GetItemDate("11/21/2011 1:00:00 PM"));
public static Date GetItemDate(final String date)
{
final Calendar cal = Calendar.getInstance(TimeZone.getDefault());
final SimpleDateFormat format = new SimpleDateFormat("MM/dd/yyyy HH:mm:ss a");
format.setCalendar(cal);
try {
return format.parse(date);
} catch (ParseException e) {
return null;
}
}
public static int minutesDiff(Date earlierDate, Date laterDate)
{
if( earlierDate == null || laterDate == null ) return 0;
return (int)((laterDate.getTime()/60000) - (earlierDate.getTime()/60000));
}
私はあなたのコードを通してデバッグしました:GetItemDate()
にはParseException
があり、次のような日付文字列の両方に対応しています:
解析できない日付:2011年11月21日07:00:00 AM
問題は、AM/PM時間の解析が "hh"(スモールキャップ!)または "KK"でのみ機能することです。少なくともそれは私の電話の場合です(私たちの一部はこの問題をまったく見なかったようです)。私はそれがシングル "h"でも動作することをテストしました。
hh = 1〜12
KK = 0-11
HH = 0〜23
kk = 1〜24
SimpleDateFormat
行を次のように変更します。
final SimpleDateFormat format = new SimpleDateFormat("MM/dd/yyyy hh:mm:ss a", Locale.US);
この投稿では、「a」とLocale
について説明しています: AM/PMマーカーでDateTime-stringを解析できません
PS。私はフィンランド出身なので、これを機能させるには「Locale.US」の部分を使用する必要があります。米国の居住者はそれなしでコードをテストするかもしれません。
GetItemDateがいずれかの日付で失敗した場合、ゼロを取得します。 catchステートメントにprintlnまたはdebugを配置して問題を出力し、それが何かを教えてくれるかどうかを確認します。
また、練習として、変更します。
return (int)((laterDate.getTime()/60000) - (earlierDate.getTime()/60000));
に:
long result = ((laterDate.getTime()/60000) - (earlierDate.getTime()/60000));
return (int) result;
これにより、IDEで数学の結果を表示する機会が得られます。