我必须找到两个String值之间的时差。我在我的应用程序中使用了以下代码,
public String diff(String first,String last)
{
SimpleDateFormat format = new SimpleDateFormat("hh:mm:ss aa");
Date d1 = null;
Date d2 = null;
try {
d1 = format.parse(first);
d2 = format.parse(last);
} catch (ParseException e) {
e.printStackTrace();
}
long diff = d2.getTime() - d1.getTime();
int diffMinutes = (int)diff / (60 * 1000);
int diffHours = (int)diff / (60 * 60 * 1000);
String res=Integer.toString(diffHours);
String res1=Integer.toString(diffMinutes);
String fin= res+res1;
return fin;
}
这是一个函数,它接受我的两个字符串并返回一个String(Time Diff),我可以在我的班级中使用它。但是当我通过点击按钮调用此功能时,我的应用程序强制关闭。
这是日志!
处理:mypackage.com.work,PID:3551 java.lang.NullPointerException:尝试调用虚方法' java.lang.String mypackage.com.work.UpdateTracker.diff(java.lang.String,java.lang.String)'在null对象引用上 在mypackage.com.work.UpdateTracker.onClick(UpdateTracker.java:138) 在android.view.View.performClick(View.java:4756) 在android.view.View $ PerformClick.run(View.java:19749) 在android.os.Handler.handleCallback(Handler.java:739) 在android.os.Handler.dispatchMessage(Handler.java:95) 在android.os.Looper.loop(Looper.java:135) 在android.app.ActivityThread.main(ActivityThread.java:5221) at java.lang.reflect.Method.invoke(Native Method) 在java.lang.reflect.Method.invoke(Method.java:372) 在com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:899) 在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694)`
以下是调用该函数的代码
String in_db=txtTime.getText().toString();
String out_db=txtTime2.getText().toString();
String d=up.diff(in_db,out_db);
如果我只是评论这个并插入一个硬编码的字符串,它的工作正常!。所以我觉得数据库代码没问题
帮我解决这个问题!!
提前致谢
答案 0 :(得分:0)
试试这个。您可以将字符串保存并检索时间:
String to long: String.valueOf()
long to String: Long.valueOf()
使用此程序计算差异:
//Time checker
private String timeCheck(long startTimeInput, long endTimeInput) {
long millis = endTimeInput - startTimeInput;
int seconds = (int) (millis / 1000);
int minutes = seconds / 60;
int hours = minutes / 60;
return "Hours: "+hours+" minutes: "+minutes+" seconds: "+seconds;
}
在你的主程序中这样称呼:
String start = "Tue Apr 23 16:08:28 GMT+05:30 2015";
String end = "Tue Apr 23 18:12:30 GMT+05:30 2015";
SimpleDateFormat sdf = new SimpleDateFormat("EEE MMM dd HH:mm:ss z yyyy");
try {
Date mDateStart = sdf.parse(start);
Date mDateEnd = sdf.parse(end);
long timeInMillisStart = mDateStart.getTime();
long timeInMillisEnd = mDateEnd.getTime();
Log.d(LOG_TAG,"The difference is "+timeCheck(timeInMillisStart,timeInMillisEnd));
} catch (ParseException e) {
e.printStackTrace();
}
我希望它有所帮助。