【问题标题】:How to calculate the remaining days left for a persons next birthday from the date pickers selected date in android?如何从日期选择器在android中选择的日期计算一个人下一个生日的剩余天数?
【发布时间】:2014-12-02 06:09:20
【问题描述】:

我编写了一个程序来根据从日期选择器中选择的日期计算一个人的年龄,并且它工作正常。 现在我添加了另一种方法来显示剩余的天数以及该人的生日落在他的下一个生日的那一天

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

此程序中的问题是剩余天数基于今天的日期而不是从日期选择器中选择的日期,这意味着即使我从日期选择器中选择任何其他日期,剩余天数仍然保持不变并且dayoftheweek 也显示相同,我希望两者都根据所选日期进行更改

还附上两个不同生日的截图,我截图的最后两行的输出是相同的


当从日期选择器中选择任何日期时,我的程序会正确显示人的年龄,就像我希望我的剩余天数和人的生日落在哪一天改变一样,当从日期选择器中选择任何日期时日期选择器 关于我需要在上面的代码中做哪些更改,请需要一些帮助 任何的意见都将会有帮助 谢谢你

【问题讨论】:

    标签: android date


    【解决方案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();
    
    }
    

    希望这会有所帮助。

    【讨论】:

    • 先生,谢谢您,剩余的日子完美无缺,但是先生,日子没有改变,它总是显示星期三,先生,每周都在变化的剩余天数每周都在变化,这意味着从 2014 年 11 月 25 日开始到 2014 年 12 月 2 日,它显示剩余的相同天数,仅在一周后更改,但我想每天更改它,我知道它是因为 DAY_OF_WEEK,先生该怎么办?
    • 您需要正确传递日期。 @arjunnarahari
    • 如果我希望格式在您下一个生日之前还有 4 个月零 5 天。
    猜你喜欢
    • 2016-06-02
    • 1970-01-01
    • 1970-01-01
    • 2016-07-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-11
    • 1970-01-01
    相关资源
    最近更新 更多