我正在设计一个简单的android活动,带有edittext、calendarview和一个按钮。按此按钮将以yyyy/mm/dd格式发回用户输入的文本和选定的日期(仅一天)。
首先我想有一个非常简单的方法来解决这个问题,例如:
str_selectedDay = myCalendarview.getYear() + "/";
str_selectedDay += myCalendarview.getMonth() + "/";
str_selectedDay += myCalendarview.getYear();
但事实上,对于calendarview没有类似的方法。唯一有点相似的方法是 myCalendarView.getDate()
. 问题是它返回的是今天的日期,单位是毫秒,而不是用户选择的日期。
我在google上搜索了这个问题(这里也发现了一些老问题),有些人建议使用这样的方法:
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()));
因此,当用户在calendarview中选择一个新的日期时,我必须将calendarview的日期更改为他选择的日期,方法是将所选的年、月和日期转换回毫秒,然后用setdate()方法写入。
这是可行的,但似乎100%复杂和不自然。
我的问题是:从calendarview获取信息的正确方法是什么?
暂无答案!
目前还没有任何答案,快来回答吧!