首页 > 解决方案 > 从 CalendarView 中获取日期

问题描述

我正在设计一个带有 EditText、CalendarView 和 Button 的简单 android 活动。按下按钮假设以 YYYY/mm/dd 格式发回用户输入的文本和选择的日期(仅限一天)。

首先,我认为会有一个非常简单的方法来解决这个问题,例如:

str_selectedDay = myCalendarview.getYear() + "/";
str_selectedDay += myCalendarview.getMonth() + "/";
str_selectedDay += myCalendarview.getYear();

但实际上 CalendarView 不存在这样的方法。唯一远程相似的方法是myCalendarView.getDate(). 问题在于它以毫秒为单位返回今天的日期,而不是用户选择的日期。

我用谷歌搜索了这个问题(在这里也发现了一些旧问题),有些人建议使用这样的东西:

myCalendarView.setOnDateChangeListener(new CalendarView.OnDateChangeListener() {
        @Override
        public void onSelectedDayChange(CalendarView view, int year, int month, int dayOfMonth) {
            str_seletedDate = String.format("%04d.%02d.%02d", year, month + 1, dayOfMonth);

        }
    });

这样做的一个主要问题是,如果用户只想选择当前日期(默认选择的日期),这意味着他不会点击 CalendarView,因此该str_bookDueDate变量永远不会更新。

所以我想出了这个解决方案:

myCalendarView.setOnDateChangeListener(new CalendarView.OnDateChangeListener() {
    @Override
    public void onSelectedDayChange(CalendarView view, int year, int month, int dayOfMonth) {
        try {
            String str_selectedDate= String.format("%04d.%02d.%02d", year, month + 1, dayOfMonth);
            SimpleDateFormat sdf = new SimpleDateFormat("yyyy.MM.dd");
            Date date = sdf.parse(str_selectedDate);
            long millis = date.getTime();
            myCalendarView.setDate(millis);

        } catch (Exception e) {
            UImessage.Log(e.toString());
        }
    }
});

然后当我需要获取日期时:

SimpleDateFormat sdf = new SimpleDateFormat("yyyy.MM.dd");
String date = sdf.format(new Date(myCalendarView.getDate()));

那么当用户在日历视图中选择新的一天时发生了什么,我必须通过将选定的年份、月份和日期转换回毫秒并使用 setDate() 方法将其写入来将日历视图的日期更改为他选择的日期。

这可行,但似乎 100% 令人费解且不直观。

我的问题是:从 CalendarView 获取信息的正确方法是什么?

标签: javaandroidcalendarview

解决方案


推荐阅读