2014-12-02 122 views
-1

我写了一个程序,根据从日期选择器选择日期来计算人的年龄,其工作的罚款。 现在我增加了一个方法来显示只剩余天数,并在其上的人的生日是他的下一个生日当天如何计算Android中日期选择器选择日期后下一个生日的剩余日期?

private void calculateNextBirthday() { 
    // TODO Auto-generated method stub 

    Date dt = new Date(); 
    SimpleDateFormat sdf = new SimpleDateFormat(
       "yyyy/MM/dd"); 
    final String strBDay = sdf.format(dt); 
    try { 

     dt = sdf.parse(strBDay); 
    } catch (final java.text.ParseException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 
    final Calendar c = Calendar.getInstance(); 

    c.setTime(dt); 
    // c.add(Calendar.DATE, value); 
    final Calendar today = Calendar.getInstance(); 
    // Take your DOB Month and compare it to current 
    // month 
    final int BMonth = c.get(Calendar.MONTH); 
    final int CMonth = today.get(Calendar.MONTH); 
    c.set(Calendar.YEAR, today.get(Calendar.YEAR)); 
    c.set(Calendar.DAY_OF_WEEK, 
       today.get(Calendar.DAY_OF_WEEK)); 
    if (BMonth <= CMonth) { 
     c.set(Calendar.YEAR, 
        today.get(Calendar.YEAR) + 1); 
    } 
    // Result in millis 

    final long millis = c.getTimeInMillis() 
         - today.getTimeInMillis(); 
    // Convert to days 
    final long days = millis/86400000; // Precalculated 
                // (24 * 
                // 60 * 
                // 60 * 
                // 1000) 
    // final String dayOfTheWeek = 
    // sdf.format(BDay.getTime()); 
    sdf = new SimpleDateFormat("EEEE"); 
    final String dayOfTheWeek = sdf.format(dt); 
    txt8.setText("" + days + " days"); 
    txt10.setText("" + dayOfTheWeek); 
} 

在这个方案的问题是剩下的作品今天的日期的基础,但在剩下的日子不是从日期选择器中选择的日期,即意味着即使我从日期选择器中选择任何其他日期,其余日期保持不变,并且日周也显示相同,我希望两者都根据所选日期进行更改

也用两种不同的生日和输出附接2个截图是在我的屏幕截图的最后两行相同

enter image description here
enter image description here

我的程序正确地显示了人的年龄选择从日期选取任何日期时,以同样的方式我想我剩下的日子,并在其上的人的生日,以改变一天当选择从日期选取任何日期 请需要一些帮助,以什么样的变化,我需要在上面的代码做任何 建议将是有益的 感谢您

回答

1

的问题是:

您正在计算使用当前日期的差异。

见少许修改功能:

private void calculateNextBirthday() { 
    // TODO Auto-generated method stub 

    /*Date dt = new Date(); //this is just current date, which was causing issue. It should be user selected date 
    SimpleDateFormat sdf = new SimpleDateFormat(
       "yyyy/MM/dd"); 
    final String strBDay = sdf.format(dt); 
    try { 

     dt = sdf.parse(strBDay); 
    } catch (final java.text.ParseException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    }*/ 

    final Calendar c = Calendar.getInstance(); 
    c.set(1990, 8, 03); //this is birthdate. set it to date you get from date picker 
    // c.add(Calendar.DATE, value); 
    final Calendar today = Calendar.getInstance(); 
    // Take your DOB Month and compare it to current 
    // month 
    final int BMonth = c.get(Calendar.MONTH); 
    final int CMonth = today.get(Calendar.MONTH); 

    final int BDate = c.get(Calendar.DAY_OF_MONTH); 
    final int CDate = today.get(Calendar.DAY_OF_MONTH); 

    c.set(Calendar.YEAR, today.get(Calendar.YEAR)); 
    c.set(Calendar.DAY_OF_WEEK, 
       today.get(Calendar.DAY_OF_WEEK)); 
    if (BMonth < CMonth) { 
     c.set(Calendar.YEAR, 
        today.get(Calendar.YEAR) + 1); 
    } 
    //added this condition so that it doesn't add in case birthdate is greater than current date . i.e. yet to come in this month. 
    else if (BMonth == CMonth){ 
     if(BDate < CDate){ 
      c.set(Calendar.YEAR, 
        today.get(Calendar.YEAR) + 1); 
     } 
    } 
    // Result in millis 

    final long millis = c.getTimeInMillis() 
         - today.getTimeInMillis(); 
    // Convert to days 
    final long days = millis/86400000; // Precalculated 
                // (24 * 
                // 60 * 
                // 60 * 
                // 1000) 
    // final String dayOfTheWeek = 
    // sdf.format(BDay.getTime()); 
    /*sdf = new SimpleDateFormat("EEEE"); 
    final String dayOfTheWeek = sdf.format(dt);*/ 
    Toast.makeText(getApplicationContext(), String.valueOf(days), Toast.LENGTH_SHORT).show(); 

} 

希望这有助于。

+0

先生感谢你剩下的日子完美的作品,但先生的日子并没有改变,它总是显示周三和爵士的剩余天数正在改变它每周都发生变化,意味着像从2014年11月25日至2014年12月2日它显示剩下的同一天,它只在一个星期后改变,但我想每天改变它,我知道它是因为DAY_OF_WEEK,该怎么做先生? – 2014-12-03 09:12:34

+0

你需要正确地通过日期。 @arjunnarahari – 2014-12-03 09:13:36

相关问题