【问题标题】:How to compare Time set with Actual Time?如何比较时间设置和实际时间?
【发布时间】:2012-10-16 19:49:49
【问题描述】:

在我的应用程序中,您可以使用 date/timePickers 设置日期/时间。

 SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
 Date datahora;
 datahora = (Date) formatter.parse(data);

我需要将我设置的时间与手机的实际时间进行比较。所以我试过这个:

SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date datahora;
String datatmp = formatter.format(new Date(0));
 try {
    datahora = (Date) formatter.parse(data);
    if(datahora <= datatmp)

但我知道它错了,因为它说它不能检查date &gt; string,但我不知道如何检查实际时间。

编辑

LogCat

    10-08 20:14:07.453: E/AndroidRuntime(261): FATAL EXCEPTION: main
    10-08 20:14:07.453: E/AndroidRuntime(261): java.lang.IllegalStateException: get field slot from row 0 col -1 failed
    10-08 20:14:07.453: E/AndroidRuntime(261):  at android.database.CursorWindow.getString_native(Native Method)
    10-08 20:14:07.453: E/AndroidRuntime(261):  at android.database.CursorWindow.getString(CursorWindow.java:329)
    10-08 20:14:07.453: E/AndroidRuntime(261):  at android.database.AbstractWindowedCursor.getString(AbstractWindowedCursor.java:49)
    10-08 20:14:07.453: E/AndroidRuntime(261):  at com.example.mensagem.Mensagenssalvas$1.onItemClick(Mensagenssalvas.java:59)
    10-08 20:14:07.453: E/AndroidRuntime(261):  at android.widget.AdapterView.performItemClick(AdapterView.java:284)
    10-08 20:14:07.453: E/AndroidRuntime(261):  at android.widget.ListView.performItemClick(ListView.java:3382)
    10-08 20:14:07.453: E/AndroidRuntime(261):  at android.widget.AbsListView$PerformClick.run(AbsListView.java:1696)
    10-08 20:14:07.453: E/AndroidRuntime(261):  at android.os.Handler.handleCallback(Handler.java:587)
    10-08 20:14:07.453: E/AndroidRuntime(261):  at android.os.Handler.dispatchMessage(Handler.java:92)
    10-08 20:14:07.453: E/AndroidRuntime(261):  at         android.os.Looper.loop(Looper.java:123)
    10-08 20:14:07.453: E/AndroidRuntime(261):  at android.app.ActivityThread.main(ActivityThread.java:4627)
    10-08 20:14:07.453: E/AndroidRuntime(261):  at java.lang.reflect.Method.invokeNative(Native Method)
    10-08 20:14:07.453: E/AndroidRuntime(261):  at java.lang.reflect.Method.invoke(Method.java:521)
    10-08 20:14:07.453: E/AndroidRuntime(261):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
    10-08 20:14:07.453: E/AndroidRuntime(261):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
    10-08 20:14:07.453: E/AndroidRuntime(261):  at dalvik.system.NativeStart.main(Native Method)

【问题讨论】:

    标签: android date time


    【解决方案1】:

    要获取当前日期/时间,您只需创建一个新的Date 对象。

    要比较日期,请使用Date.compareTo()

    SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    Date now = new Date();
    int difference = now.compareTo(formatter.parse(data));
    

    根据docsdifference 将是:

    如果参数 Date 等于此 Date,则值为 0;少一个值 如果此 Date 在 Date 参数之前,则大于 0;和更大的价值 如果此 Date 在 Date 参数之后,则大于 0。

    if (difference == 0) {
        // the dates are equal
    }
    else if (difference < 0) {
        // the date is before now
    }
    else {
        // the date is after now
    }
    

    【讨论】:

    • 哦,谢谢,你能用if 声明发布代码吗? '-'
    • 好吧,所以我在服务中测试它(不知道是否改变了什么)所以我这样使用:if(datahora == now) { 但没有结果。在 Date() 我有一个 0 在 () 里面,我尝试了你的代码,我的应用程序崩溃了。 LogCat 错误在问题编辑中。
    • 你永远不想做if (datahora == now)它是行不通的。你必须做if (dateahora.compareTo(now) == 0)。不要在 Date() 中输入 0,否则它将是 1970 年 1 月,而不是现在。
    • 但是,如果我不说:The constructor Date() is undefined 所以我必须将 0 或 0,0,0 放在 () 内
    • 您导入的日期是否正确?文档另有说法。 developer.android.com/reference/java/util/Date.html#Date()
    【解决方案2】:

    当然你不能用字符串比较日期。

    试试下面的

    Date datatmp = new Date();  
    
     try {
           datahora = (Date) formatter.parse(data);
            if( datahora.before(datatmp) )
    .
    .
    

    如果勾选Java Docs for Date,除了compareTo之外,它还有afterbefore功能。

    最好, 罗汉

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-05-08
      • 2016-09-19
      • 2013-07-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多