java - 从 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 获取信息的正确方法是什么?
解决方案
推荐阅读
- reactjs - 将 React Native 从 0.57 升级到 0.58.5
- c# - 修改了带有 Monitor Collection 的 C#;枚举操作可能无法执行
- three.js - 如何使 CSS2DRenderer 标签表现得像 SpriteMaterial 一样用于缩放对象与父母?
- nativescript - 以编程方式添加新事件时,RadCalendar 不更新事件
- javascript - 排毒 textInput 不写文本
- google-apps-script - 如何根据另一列中的另一个值是否存在匹配来设置单元格的值?
- oracle - 如何将字符串列表传递给 Olracle 中的存储过程
- node.js - Heroku 上的 Redis 连接错误:127.0.0.1 而不是 REDIS_URL
- bixby - 如何调试与惰性属性相关的问题?
- jquery - 选项卡中的值显示为 NaN