我想将 strSqliteDate:= 2016-01-14 05:34:50 PM 转换为 2016-01-14 。转换所有日期后我的应用程序崩溃了并得到
的错误02-01 12:03:15.204 7619-7619/com.example.tazeen.classnkk W/System.err﹕ java.lang.NullPointerException: Attempt to invoke virtual method 'int java.lang.String.length()' on a null object reference
02-01 12:03:15.204 7619-7619/com.example.tazeen.classnkk W/System.err﹕ at java.text.SimpleDateFormat.parse(SimpleDateFormat.java:1035)
02-01 12:03:15.204 7619-7619/com.example.tazeen.classnkk W/System.err﹕ at java.text.DateFormat.parse(DateFormat.java:577)
在此行date = dateFormat.parse(strSqliteDate);
并在此line = calendar.setTime(date);
引起:java.lang.NullPointerException:尝试调用虚拟 null对象引用上的方法'long java.util.Date.getTime()' 在java.util.Calendar.setTime(Calendar.java:1195)
这是DBhelper类中的日期转换代码
String strSqliteDate = cursor.getString(cursor.getColumnIndex("ActionDate"));
Log.e(" strSqliteDate "," = " + strSqliteDate);
String result = "";
Date date = null;
DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
try
{
date = dateFormat.parse(strSqliteDate);
}
catch(Exception e)
{
e.printStackTrace();
}
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
SimpleDateFormat printFormat = new SimpleDateFormat("yyyy-MM-dd");
result = printFormat.format(calendar.getTime());
Log.e("result = ","==========>"+result);
答案 0 :(得分:5)
使用前变量strSqliteDate检查它是否为空?
String strSqliteDate = cursor.getString(cursor.getColumnIndex("ActionDate"));
if(strSqliteDate != null && !strSqliteDate .isEmpty())
{
Log.e(" strSqliteDate "," = " + strSqliteDate);
String result = "";
Date date = null;
DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
try
{
date = dateFormat.parse(strSqliteDate);
}
catch(Exception e)
{
e.printStackTrace();
}
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
SimpleDateFormat printFormat = new SimpleDateFormat("yyyy-MM-dd");
result = printFormat.format(calendar.getTime());
Log.e("result = ","==========>"+result);
}
答案 1 :(得分:1)
引起:java.lang.NullPointerException:尝试调用虚拟 方法' long java.util.Date.getTime()'在null对象引用 java.util.Calendar.setTime(Calendar.java:1195)
根据您的问题,您应该使用substring()
&请检查数据库是否为null
。
此方法有两个变体,并返回一个新的字符串,即a 这个字符串的子串。子字符串以字符at开头 指定的索引并延伸到此字符串的末尾或最多 endIndex - 如果给出第二个参数,则为1。
.substring(startIndex, endIndex);
strSqliteDate = 2016-01-14 05:34:50 PM
System.out.println(strSqliteDate.substring(0,11));
答案 2 :(得分:0)
使用 subString 方法引用Refers link
strSqliteDate.subString(0,10)
Output will be==>> 2016-01-14
答案 3 :(得分:0)
您的date = dateFormat.parse(strSqliteDate);
strSqliteDate
null 这就是你获得NPE的原因
答案 4 :(得分:0)
在第
行result = printFormat.format(calendar.getTime());
在formate()
的参数中传递日期类的引用。