我正在尝试在文本视图中显示本地日期(即 2021 年 9 月 14 日,星期二),但我很难找到方法。任何提示或想法?
问问题
149 次
4 回答
2
您可以使用SimpleDateFormat
类来格式化日期。要获得您指定的格式,请使用以下命令:
textView.text = SimpleDateFormat("EEEE, MMMM dd, yyyy").format(Date())
要了解不同日期和时间模式的含义,请查看此链接。
于 2021-09-14T04:46:45.317 回答
1
java.time 和内置的本地化格式
考虑为您的日期工作使用现代 Java 日期和时间 API java.time。请原谅我的 Java 语法。声明一个格式化程序:
private static final DateTimeFormatter DATE_FORMATTER
= DateTimeFormatter.ofLocalizedDate(FormatStyle.FULL).withLocale(Locale.US);
像这样使用:
LocalDate today = LocalDate.now(ZoneId.systemDefault());
String text = today.format(DATE_FORMATTER);
System.out.println(text);
今天运行时,输出为:
2021 年 9 月 15 日,星期三
TextView
现在按照其他答案中的描述将此文本分配给您的文本。
您不仅要避免麻烦的SimpleDateFormat
类,还要避免编写自己的格式模式字符串,因为这很容易出错。您的愿望与您的用户希望看到以适合其语言环境的适当格式打印的日期的愿望密切相关。在上面我用于Local.US
演示的代码中。在实际代码中,您将希望省略这一点。然后格式化程序将采用设备的默认语言环境,所有语言环境的用户都会很高兴。就像这样:
private static final DateTimeFormatter DATE_FORMATTER
= DateTimeFormatter.ofLocalizedDate(FormatStyle.FULL);
问题:java.time 不需要 Android API 级别 26 吗?
java.time 在较旧和较新的 Android 设备上都能很好地工作。它只需要至少Java 6。
- 在 Java 8 及更高版本以及更新的 Android 设备(从 API 级别 26 开始)中,现代 API 是内置的。
- 在非 Android Java 6 和 7 中获得 ThreeTen Backport,现代类的后向端口(ThreeTen 用于 JSR 310;请参阅底部的链接)。
- 在较旧的 Android 上,要么使用脱糖,要么使用 ThreeTen Backport 的 Android 版本。它被称为 ThreeTenABP。在后一种情况下,请确保您从
org.threeten.bp
子包中导入日期和时间类。
链接
- 类似的问题:基于 android 上的用户区域设置的日期格式。
- Oracle 教程:日期时间解释如何使用 java.time。
- Java 规范请求 (JSR) 310,
java.time
第一次描述的地方。 - ThreeTen Backport 项目,
java.time
Java 6 和 7 的反向移植(ThreeTen for JSR-310)。 - 可通过脱糖获得 Java 8+ API
- ThreeTenABP , ThreeTen Backport 的 Android 版
- 问题:如何在Android项目中使用ThreeTenABP,有非常详尽的解释。
于 2021-09-15T19:15:07.473 回答
0
试试这个代码
val sdf = SimpleDateFormat("EEE, MMMM dd, yyyy")
val current = sdf.format(Date())
textView.text = "$current"
于 2021-09-14T04:47:46.283 回答
0
谢谢大家!这两种解决方案都有效:
解决方案1:
val dateDisplay: TextView = findViewById(R.id.date)
dateDisplay.text = SimpleDateFormat("EEEE, MMMM dd, yyyy").format(Date())
解决方案2:
val sdf = SimpleDateFormat("EEE, MMMM dd, yyyy")
val current = sdf.format(Date())
val dateDisplay: TextView = findViewById(R.id.date)
dateDisplay.text = "$current"
于 2021-09-14T13:31:10.030 回答