Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/193.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 通过在android中将两个字符串转换为日期格式来实现时间差_Java_Android - Fatal编程技术网

Java 通过在android中将两个字符串转换为日期格式来实现时间差

Java 通过在android中将两个字符串转换为日期格式来实现时间差,java,android,Java,Android,我必须找出两个字符串值之间的时间差。我在我的应用程序中使用了以下代码 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 = for

我必须找出两个字符串值之间的时间差。我在我的应用程序中使用了以下代码

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;
}
这是一个函数,它接受我的两个字符串并返回一个字符串(Time Diff),我可以在类中使用它。但当我点击按钮调用此函数时,我的应用程序强制关闭

这是日志

流程:mypackage.com.work,PID:3551 java.lang.NullPointerException:尝试对空对象引用调用虚拟方法“java.lang.String mypackage.com.work.UpdateTracker.diff(java.lang.String,java.lang.String)” 在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) 位于java.lang.reflect.Method.invoke(本机方法) 位于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);
如果我只是对此进行注释并插入一个硬编码字符串,那么它就可以正常工作了!。所以我认为DB代码没有问题

帮我弄清楚这个


提前感谢

试试这个。您可以将时间保存和检索为字符串:

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

我希望这会有帮助。

你能发布崩溃日志吗?它没有显示日志。我甚至试过使用Log.v和Log.d,但那部分是空的。以前它工作得很好。我如何才能再次启用?你能在_db中打印,输出_db这些吗?你传递的字符串的格式与指定的不同如果是,那么应该是什么格式?你能发布它吗