从DatePickerDialog显示日期更容易

时间:2019-09-19 09:07:20

标签: android kotlin calendar simpledateformat

现在显示日期如下:

{{1}}

做起来容易吗?

1 个答案:

答案 0 :(得分:1)

很多事情都不容易。简化的两个建议:

  1. 使用java.time(现代Java日期和时间API)。在这种情况下,我们将两个旧类hash.values.lastCalendar替换为一个新类Date。因此,它为我们节省了转换。另外,您使用的类已经过时了,通常使用java.time会更好。
  2. 对用户的语言环境使用内置的本地化日期格式,而不要编写格式模式字符串。后者往往容易出错,并且使用内置格式使其更易于国际化。

下面的代码未经测试,可能有一两个错字,但是您应该明白这一点。

LocalDate

插入您要放置非洲/阿比让的所需时区。使用 val date = LocalDate.now(ZoneId.of("Africa/Abidjan")) val currentYear = date.year val currentMonth = date.monthValue val currentDay = date.dayOfMonth val dateFormatter = DateTimeFormatter.ofLocalizedDate(TextStyle.MEDIUM) pickDate.setOnClickListener { val datePickDialog = DatePickerDialog( activity, DatePickerDialog.OnDateSetListener { view, year, month, dayOfMonth -> val selectedDate = LocalDate.of(year, month + 1, dayOfMonth) val dateString = selectedDate.format(dateFormatter) currentDateView.text = dateString }, currentYear, currentMonth - 1, currentDay ) datePickDialog.show() } 作为默认时区(这是您问题中使用的代码)。我还从事件监听器中取出了格式化程序。无需每次都构造一个新的格式化程序。

问题:我可以在Android上使用java.time吗?我在项目中使用最小API 21

是的,java.time在较新和较旧的Android设备上均可正常运行。它只需要至少 Java 6

  • 在Java 8和更高版本以及更新的Android设备(API级别26以上)中,内置了现代API。
  • 在Java 6和7中,获得了ThreeTen反向端口,这是现代类的反向端口(JSR 310的ThreeTen;请参见底部的链接)。
  • 在(较旧的)Android上,使用Android版本的ThreeTen Backport。叫做ThreeTenABP。并确保您使用子包从ZoneId.systemDefault导入日期和时间类。

链接