3

日付の比較に問題があります。TextView からの日付があります (通常は SQLite テキスト フィールドに格納されます)。TextView の rowduedate には、「2012/10/01 15:16」という値の日付が含まれています。以下に貼り付けたコードをコメントアウトすると、正常に動作し、R.id.rowduedate が表示されます。だから空じゃない。ただし、LogCat で次のエラーが発生します。

11-01 15:16:55.445: E/AndroidRuntime(783): FATAL EXCEPTION: main
11-01 15:16:55.445: E/AndroidRuntime(783): java.lang.NumberFormatException: Invalid   long: ""
11-01 15:16:55.445: E/AndroidRuntime(783):  at   java.lang.Long.invalidLong(Long.java:125)
11-01 15:16:55.445: E/AndroidRuntime(783):  at java.lang.Long.parseLong(Long.java:346)
11-01 15:16:55.445: E/AndroidRuntime(783):  at java.lang.Long.parseLong(Long.java:319)
11-01 15:16:55.445: E/AndroidRuntime(783):  at com.android.demo.notepad3.Notepadv3$1.setViewValue(Notepadv3.java:100)

これはコードです:

TextView dueDate = (TextView) view.findViewById(R.id.rowduedate);
String due = (String) dueDate.getText().toString();

if(due!=null){
Long longDue = Long.parseLong(due);
String now = new Date().toString();
Long longNow = Long.parseLong(now);

if(longDue <= longNow){

       dueDate.setTextColor(Color.RED);
}               
}
4

3 に答える 3

3

日付から時間を抽出できるように、日付のフォーマット方法をコードに伝える必要があります。

String strDate = "2007-12-25";
SimpleDateFormat Formatter = new SimpleDateFormat("yyyy/MM/dd");
Date myDate    = Formatter.parse(strDate);
于 2012-11-01T15:28:41.747 に答える
1

空の文字列を解析しようとしているようです。注意してください。

dueDate:TextViewに「2012/10/0115:16」の形式の有効な日付が含まれていると仮定します。

long due = new SimpleDateFormat("yyyy/MM/dd HH:mm").parse(dueDate.getText().toString()).getTime();

if (due <= System.currentTimeMillis()) 
    dueDate.setTextColor(Color.RED);

それは役立つはずです、

于 2012-11-01T15:54:10.000 に答える
0

日付文字列を解析して日付を比較しないでくださいLong

日付値を比較する方法は次のとおりです。確認してください

TextView dueDate = (TextView) view.findViewById(R.id.rowduedate);
String due = (String) dueDate.getText().toString();
SimpleDateFormat parser=new SimpleDateFormat("yyyy/MM/dd HH:mm");
Date d = null;
Date now = new Date();
if(due!=null){
try {
  d = parser.parse(due);
} catch (ParseException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
}
if(d.before(now){

       dueDate.setTextColor(Color.RED);
}               
}
于 2012-11-02T03:48:11.040 に答える