【问题标题】:Display local date in textview (Kotlin)在 textview (Kotlin) 中显示本地日期
【发布时间】:2021-09-14 04:33:46
【问题描述】:

我正在尝试在文本视图中显示本地日期(即 2021 年 9 月 14 日,星期二),但我很难找到方法。有什么建议或想法吗?

【问题讨论】:

  • 欢迎来到 Stack Overflow。 我很难找到一种方法。 为了找到一种方法,您尝试了哪些方法?它以什么方式不足?向我们展示您所做的努力将使这里的许多用户准备好做出更大的努力来帮助您。它可能还会向我们展示您在任务的哪一部分遇到了问题,因此我们可以将答案集中在那里,从而更好、更准确地帮助您。

标签: android date kotlin date-formatting current-time


【解决方案1】:

您可以使用SimpleDateFormat 类来格式化日期。 要获得您指定的格式,请使用:

textView.text = SimpleDateFormat("EEEE, MMMM dd, yyyy").format(Date())

要了解不同日期和时间模式的含义,请查看this 链接。

【讨论】:

  • 请不要教年轻人使用早已过时且臭名昭著的SimpleDateFormat类。至少不是第一选择。而且不是没有任何保留。我们在java.time, the modern Java date and time API, 和它的DateTimeFormatter 中做得更好。是的,您可以在 Android 上使用它。对于较旧的 Android,请查看 desugaring
【解决方案2】:

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,这是现代类的后向端口(对于 JSR 310,ThreeTen;请参阅底部的链接)。
  • 在较旧的 Android 上,请使用脱糖或 Android 版本的 ThreeTen Backport。它被称为 ThreeTenABP。在后一种情况下,请确保使用子包从 org.threeten.bp 导入日期和时间类。

链接

【讨论】:

  • 我强烈推荐使用这个解决方案,而不是使用损坏的java.util Date-Time API。 java.util 日期时间 API 及其格式化 API SimpleDateFormat 已过时且容易出错。建议完全停止使用,改用modern Date-Time API
【解决方案3】:

试试这个代码

val sdf = SimpleDateFormat("EEE, MMMM dd, yyyy")
val current = sdf.format(Date())

textView.text = "$current"

【讨论】:

    【解决方案4】:

    谢谢大家!这两种解决方案都有效:

    解决方案 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"
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-03-11
      • 2021-12-08
      • 2014-03-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多