我有一个问题,有日期比较。我有一个来自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);
}
}
答案 0 :(得分:3)
您需要告诉您的代码如何格式化日期,以便从中提取时间。
String strDate = "2007-12-25";
SimpleDateFormat Formatter = new SimpleDateFormat("yyyy/MM/dd");
Date myDate = Formatter.parse(strDate);
答案 1 :(得分:1)
看来你正试图解析一个空字符串,小心一点。
假设您的dueDate:TextView包含以下格式的有效日期“2012/10/01 15:16”:
long due = new SimpleDateFormat("yyyy/MM/dd HH:mm").parse(dueDate.getText().toString()).getTime();
if (due <= System.currentTimeMillis())
dueDate.setTextColor(Color.RED);
那应该有帮助,
答案 2 :(得分: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);
}
}