Android DatePicker日期格式不符合预期,如何设置为dd-mmm-yy格式?
解决Android DatePicker日期格式转换为dd-mmm-yy的问题
没问题,我帮你搞定这个日期格式的转换!你现在直接拼接数字得到的是数字月份,要改成三个字母的英文月份缩写(比如Aug),用Android提供的日期格式化工具就能轻松解决,给你两种适配不同场景的方案:
方案一:使用SimpleDateFormat(兼容所有Android版本)
这是最传统的方式,适合所有Android版本,不需要额外配置。修改你的onDateSet方法即可:
@Override public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) { // 创建Calendar实例,设置用户选中的日期 Calendar calendar = Calendar.getInstance(); calendar.set(year, monthOfYear, dayOfMonth); // 定义目标格式:dd-MMM-yy,指定英文Locale确保月份缩写是英文 SimpleDateFormat dateFormatter = new SimpleDateFormat("dd-MMM-yy", Locale.ENGLISH); String formattedDate = dateFormatter.format(calendar.getTime()); txtDate.setText(formattedDate); }
这里的关键是"dd-MMM-yy"格式符:
dd:两位数的日期(比如16)MMM:三个字母的月份缩写(比如Aug)yy:两位数的年份(比如21)- 加上
Locale.ENGLISH是为了避免系统语言影响,确保不管用户手机是中文还是其他语言,都输出英文的月份缩写。
方案二:使用Java 8+的DateTimeFormatter(推荐,更简洁)
如果你开发的应用目标是Android 8.0(API 26)及以上,或者愿意通过Core Library Desugar兼容更低版本,推荐使用更现代的java.time API,代码更简洁易读:
@Override public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) { // 注意:LocalDate的月份是1-based的,所以要给monthOfYear加1 LocalDate selectedDate = LocalDate.of(year, monthOfYear + 1, dayOfMonth); // 定义格式化器,同样指定英文Locale DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd-MMM-yy", Locale.ENGLISH); String formattedDate = selectedDate.format(formatter); txtDate.setText(formattedDate); }
兼容低版本配置(Android 7.1及以下)
如果要在低版本Android上使用java.time API,需要在你的build.gradle(Module级别)中添加以下配置:
android { defaultConfig { coreLibraryDesugaringEnabled true } compileOptions { sourceCompatibility JavaVersion.VERSION_1_8 targetCompatibility JavaVersion.VERSION_1_8 } } dependencies { coreLibraryDesugaring 'com.android.tools:desugar_jdk_libs:2.0.4' }
这两种方案都能帮你得到16-Aug-21这样的目标格式,根据你的项目需求选一个就行啦!
内容的提问来源于stack exchange,提问作者Android God
相关产品推荐
相关产品推荐

