【问题标题】:how to convert multiple EditText value into one date String in android studio?如何在android studio中将多个EditText值转换为一个日期字符串?
【发布时间】:2020-05-27 05:15:41
【问题描述】:

它是一个年龄计算器项目我需要知道如何在 android studio 中将多个 EditText 值转换为一个日期字符串?请记住,我使用的是“joda-time library”,它没有显示结果。我不知道我在哪里做错了!我已经忘记了我现在无法解决的所有问题,希望你们能帮助我。谢谢

public void dateOfBirth(){

    String day = editTextDay.getText().toString().trim();
    String month = editTextMonth.getText().toString().trim();
    String year = editTextYear.getText().toString().trim();

    SimpleDateFormat simpleDateFormat = new SimpleDateFormat("dd/MM/yyyy");
    String sDate = day+"/"+month+"/"+year;

    long date = System.currentTimeMillis();
    String eDate = simpleDateFormat.format(date);



    try {
       Date date1 = simpleDateFormat.parse(sDate);
       Date date2 =simpleDateFormat.parse(eDate);
        /* long eDate = System.currentTimeMillis();
        Date date2 = simpleDateFormat.parse(String.valueOf((eDate)));*/

        long startDate = date1.getTime();
        long endDate =date2.getTime();

        if (startDate<=endDate){

           Period period = new Period(startDate, endDate, PeriodType.yearMonthDay());
           int years = period.getYears();
           int months =period.getMonths();
           int days = period.getDays();

            textViewDay.setText(days);
            textViewMonth.setText(months);
            textViewYear.setText(years);

        }


    } catch (ParseException e) {
        e.printStackTrace();
    }



}

【问题讨论】:

  • 您应该向setText 提供一个字符串。请改用textViewDay.setText(String.valueOf(days));
  • 我对您的评论感到有些困惑,请您向我解释一下更多细节。
  • 由于您使用的是 Joda-Time,我建议您全力以赴,忘记那些设计糟糕且麻烦的课程DateSimpleDateFormat。 Joda-Time 的性能要好得多,它提供了您需要的所有功能。
  • 请说明您的代码的预期结果以及观察到的结果有何不同。从字面上引用任何错误消息。 寻求调试帮助的问题(“为什么这段代码不起作用?”)必须包括所需的行为、特定问题或错误以及在问题本身中重现它所需的最短代码。(来自@ 987654321@)

标签: android datetime android-edittext jodatime android-jodatime


【解决方案1】:

Joda-Time 全力以赴

    String day = "11";
    String month = "4";
    String year = "2012";

    String sDate = "" + year + '-' + month + '-' + day;
    LocalDate dob = new LocalDate(sDate);

    LocalDate today = new LocalDate();

    if (dob.isBefore(today)) {
        Period period = new Period(dob, today, PeriodType.yearMonthDay());
        int years = period.getYears();
        int months = period.getMonths();
        int days = period.getDays();

        System.out.println("" + years + " years " + months + " months " + days + " days");
    }

刚才运行上面的sn-p的时候,输出是:

7 年 10 个月 0 天

由于您对年、月和日感兴趣,因此您不需要 DateTime 对象(尽管它们可以工作)。它们也包括一天中的时间。只需使用LocalDate

SimpleDateFormatDate 类设计不佳且早已过时,尤其是前者,尤其是出了名的麻烦。我建议您远离这些,也不要将时间点表示为自纪元以来的long 毫秒计数。好的选择是:

  1. 请继续使用 Joda-Time,因为您已经在使用 Joda-Time。
  2. 迁移到现代 Java 日期和时间 API java.time。

【讨论】:

    【解决方案2】:

    这就是我解决问题的方法 -

    String day = editTextDay.getText().toString().trim();
        String month = editTextMonth.getText().toString().trim();
        String year = editTextYear.getText().toString().trim();
    
      //  SimpleDateFormat simpleDateFormat = new SimpleDateFormat("dd/MM/yyyy");
    
    
        String BirthDate ="" + year + '-' + month + '-' + day;
        LocalDate sDate = new LocalDate(BirthDate);
        LocalDate today = new LocalDate();
    
        Period period = new Period(sDate, today, PeriodType.yearMonthDay());
        int years = period.getYears();
        int months =period.getMonths();
        int days = period.getDays();
    
        textViewDay.setText(""+days);
        textViewMonth.setText(""+months);
        textViewYear.setText(""+years);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-12-23
      • 2012-01-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-10-07
      • 2017-03-06
      相关资源
      最近更新 更多