两个字符串之间的时间差,通过在android中将其转换为日期格式

时间:2016-01-03 15:26:19

标签: java android

我必须找到两个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);

如果我只是评论这个并插入一个硬编码的字符串,它的工作正常!。所以我觉得数据库代码没问题

帮我解决这个问题!!

提前致谢

1 个答案:

答案 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();
}

我希望它有所帮助。