【问题标题】:Date and Date format Calculation Android日期和日期格式计算Android
【发布时间】:2016-02-17 13:21:47
【问题描述】:

我有一个日期计算功能。它将我已经检索到的数据库从和到日期与我正在传递的从和到日期的输入进行比较。在调试时,它在 for 循环内分配后显示错误的日期。(输入和数据库日期)下面我用图像显示了示例。

功能代码:

/*String[] veh - vehicle name, String[] from - table from date array,
 * String[] to - table to date array,String from1 - input from date, String to1 - input to date*/
private List getDateComparison(String[] veh, String[] from, String[] to,String from1, String to1) throws ParseException {
    SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:MM",Locale.ENGLISH);
    Date table_from,table_to,input_from,input_to;
    long diff=0,diff1=0,diff2=0,diff3=0;
    int count=0,county=0;;

    for(int i=0;i<veh.length;i++){
        table_from=df.parse(from[i]);
        table_to=df.parse(to[i]);
        input_from=df.parse(from1);
        input_to=df.parse(to1);
        table_from=df.parse(df.format(table_from));
        table_to=df.parse(df.format(table_to));
        input_from=df.parse(df.format(input_from));
        input_to=df.parse(df.format(input_to));
        diff=table_from.getTime()-input_from.getTime();
        diff1=table_from.getTime()-input_to.getTime();
        diff2=input_from.getTime()-table_to.getTime();
        diff3=input_to.getTime()-table_to.getTime();
        if((diff > 0 && diff1>0) || (diff2 > 0 && diff3>0)){
            count++;
            removeAndAddList(veh[i],1);
            Log.d("Date", " ok with from");
        }
        else {
            county = 100;
            removeAndAddList(veh[i],2);
        }
    }
    return vehic;//= veh[0];
}

调试时的功能截图:

已编辑:

在我使用日期格式之前,

SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd",Locale.ENGLISH);

当时计算很完美。现在它对日期格式产生了一些问题。我认为我的 dateformat 在 for 循环中做错了什么。在使用日期格式分配日期后,它显示了更大的日期。我哪里做错了?

【问题讨论】:

  • 请给我们更多的背景信息。应用程序中的数据集和收集方式如何?你想达到什么目标?我认为您的代码可能不是正确的方法,所以这就是我问的原因,所以也许我们可以引导您朝着更好的方向前进。
  • 谢谢@Grease。我不想更改整个代码。修改将需要更多时间。有更多的依赖。我给出一个从和到日期的输入,然后从表中给出从和到日期的数组。在 for 循环内赋值后,值会发生变化。我认为日期格式有问题。
  • 不确定是否有问题,但您用于 SDF 的格式不正确 SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:MM",Locale.ENGLISH); 因为 M 表示一年中的月份,而您正在使用它分钟?换成mmHH:mm试试看
  • @Yazan,非常感谢。它奏效了。
  • 很高兴听到这个消息,如果您愿意,我可以将其发布为答案,并建议在您的代码中使用,而不是使用 diff 方法来比较日期

标签: android date datetime date-format


【解决方案1】:

您用于 SDF 的格式不正确

SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:MM",Locale.ENGLISH);

因为 M 表示 一年中的月份,您将其用作分钟。

更改为HH:mm ... = new SimpleDateFormat("yyyy-MM-dd HH:mm",Locale.ENGLISH);

题外话: 而不是使用diff=table_from.getTime()-input_from.getTime();,您可以使用after()before() 方法来处理Date

您可以按以下方式比较日期(来自您的代码):

if((diff > 0 && diff1>0) || (diff2 > 0 && diff3>0)){

将是:

if((table_from.after(input_from) && table_from.after(input_to)) 
|| (input_from.after(table_to) && input_to.after(table_to))){

现在您可以从代码中删除所有 getTime() 减法行(4 行)

【讨论】:

  • 谢谢@Yazan。这是非常有帮助的。我的问题可以理解吗?我的反对票很少。
  • @AbishR 这个问题的格式很好,你努力解释你的问题,但也许最好关注日期值不正确,而不是在标题中使用date calculation,你可以突出显示或(粗体)一些词以使其清楚,例如“我已经...的数据库fromto日期......”否则你会在那里努力:)
  • 感谢您的详细解释。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-05-09
  • 2012-08-31
  • 2011-11-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多