【问题标题】:String dateTime to Date -> check if is todayString dateTime to Date -> 检查是否是今天
【发布时间】:2012-07-29 05:59:04
【问题描述】:

我需要一个函数来检查来自 rss 提要(事件)的日期是否是今天。 rss 给出了一个字符串(在 CDATA 之间),所以我需要解析它。这个日期的形式是:

2012 年 8 月 1 日,星期三 00:00:00 +0002

时间和时区没有用处,只有日期才重要。

我想:我以与输入字符串相同的格式格式化今天的日期(为测试设置错误的电话日期)并且它们的测试是相等的。但显然设备的语言设置很重要,因为我得到了:

 Wed, 01 Aug 2012 00:00:00 +0002 = wo, 01 aug. 2012 14:36:55 +0200

(我会使用子字符串来摆脱时间)。 所以这行不通。

现在我尝试了一种新方法,但它似乎有点过于复杂: 获取字符串 --> 转换为日期 --> 将日期格式化为 ddMMyyyy 格式的字符串 --> 将今天的日期格式化为 ddMMyyyy 格式的字符串 --> 测试它们是否相等。 但是由于某种原因,这也不起作用,因为从字符串到日期的解析不起作用。但我认为我的格式完全一样...... 任何人都知道如何实现这一目标,或者我应该改变什么?

我的代码:

public boolean isAgendaToday(String inputstring){
          boolean isToday = false;
          SimpleDateFormat  format = new SimpleDateFormat("E, dd MMM yyyy HH:mm:ss Z");  
            Date deventDate = null;
            String seventDate;
             Date dtoday = new Date();
             String stoday;
             SimpleDateFormat dateOnly = new SimpleDateFormat("ddMMyyyy");
             stoday = dateOnly.format(dtoday);
             try {  
                deventDate = format.parse(inputstring); 
                seventDate = dateOnly.format(deventDate);
                 System.out.println(seventDate + " = " + stoday);
                if(stoday.equals(seventDate)){
                     isToday = true;
                 }
            } catch (ParseException e) {  
                // TODO Auto-generated catch block  
                e.printStackTrace();  
            } catch (java.text.ParseException e) {
                // XXX Auto-generated catch block
                e.printStackTrace();
            }

        return isToday;

      }

这是我每次尝试此操作后日志所说的内容(当然日期不同):

java.text.ParseException:无法解析的日期:2012 年 7 月 31 日星期二 00:00:00 +0002

【问题讨论】:

  • 看看stackoverflow.com/questions/2705548/…,有日期,你可以看看是不是当天
  • 我认为时区无关紧要——我对“今天”的看法可能与你的不同。
  • @JonSkeet 我只想比较日期,因为我手机的日期取决于时区;我从 RSS 获得的时区无关紧要。
  • @Jasper:这取决于您要实现的目标 - 但如果您要确定是否在本地“今天”发布了某些内容,那么您需要考虑 RSS 时区,因为您想首先将其解析为绝对时间。然后,您可以计算出您手机时区的绝对时间,看看是否是今天。
  • @JonSkeet:你是对的,谢谢你的思考。但是在这个应用程序的上下文中,这并不重要,但是对于方法的纯粹使用的准确性,应该考虑到它。

标签: android date format


【解决方案1】:
        Date date = null;
        SimpleDateFormat format = new SimpleDateFormat("EEE, dd MMM yyyy HH:mm:ss Z",Locale.ENGLISH);
        try
        {
            date = format.parse("Wed, 01 Aug 2012 00:00:00 +0002");
        }
        catch (ParseException e)
        {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        Date current = new Date();
        if (date != null)
            Toast.makeText(MainActivity.this, "" + current.compareTo(date), Toast.LENGTH_LONG).show();
        else
            Toast.makeText(MainActivity.this, "null", Toast.LENGTH_LONG).show();

我认为这段代码可以满足您的需求 - 创建来自 RSS 的日期取决于提供的字段,而 new Date() 创建日期取决于您当前的日期时间,并且时间戳必须相同。

但是如果你想只检查没有时间的日期,你可以将小时、分钟和秒设置为“0”

【讨论】:

  • 谢谢,确实是 locale.ENGLISH 成功了。只需将其添加到我的代码中即可。
  • 您不需要从日期创建字符串然后比较字符串。您可以比较日期 =)
  • 但是时间也必须匹配,不是吗?
猜你喜欢
  • 1970-01-01
  • 2014-12-22
  • 2011-08-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-02-10
  • 1970-01-01
  • 2011-03-30
相关资源
最近更新 更多