Android:如何在onDateChangedListener中获取并显示年周数?
解决DatePicker选中日期后显示年周数的问题
我来帮你搞定这个小问题~你现在的代码只在初始化时获取了一次当前日期的周数,但当用户选择新日期时,并没有重新计算对应日期的周数,所以才没法更新显示。
具体修改步骤:
- 在
onDateChanged回调里,根据用户选中的年、月、日创建一个新的Calendar实例 - 通过这个实例获取该日期对应的
WEEK_OF_YEAR值 - 把日期和周数一起拼接后显示到
TextView里
修改后的代码如下:
protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); BottomNavigationView bottomNav = findViewById(R.id.bottom_navigation); bottomNav.setOnNavigationItemSelectedListener(navListener); datePicker = (DatePicker) findViewById(R.id.kalender); datoText = (TextView) findViewById(R.id.kalenderText); Calendar calendar = Calendar.getInstance(); calendar.setTimeInMillis(System.currentTimeMillis()); int year = calendar.get(Calendar.YEAR); int month = calendar.get(Calendar.MONTH); int day = calendar.get(Calendar.DAY_OF_MONTH); datePicker.init(year, month, day, new DatePicker.OnDateChangedListener() { @Override public void onDateChanged(DatePicker view, int year, int monthOfYear, int dayOfMonth) { // 创建选中日期对应的Calendar实例 Calendar selectedCalendar = Calendar.getInstance(); // DatePicker返回的monthOfYear是0-based,和Calendar的MONTH字段一致,直接设置即可 selectedCalendar.set(year, monthOfYear, dayOfMonth); // 获取该日期的年周数 int weekOfYear = selectedCalendar.get(Calendar.WEEK_OF_YEAR); // 拼接日期和周数文本,这里可以根据需求调整显示格式 String dato = dayOfMonth + " / " + (monthOfYear + 1) + " / " + year + " | 第" + weekOfYear + "周"; datoText.setText(dato); } }); }
额外说明:
如果你的应用需要特定的周计算规则(比如每周从周一开始,而不是默认的周日),可以在创建selectedCalendar后添加一行代码:
selectedCalendar.setFirstDayOfWeek(Calendar.MONDAY);
这样就能根据你的需求正确计算周数啦~
内容的提问来源于stack exchange,提问作者Fredrik Ellefsen
相关产品推荐
相关产品推荐

