【问题标题】:How do I display time in 24-hour format using a TextClock?如何使用 TextClock 以 24 小时格式显示时间?
【发布时间】:2013-03-12 17:08:04
【问题描述】:

我在尝试以 24 小时格式显示时间时遇到问题。我已经让它显示另一个时区的时间,但我无法让它以 24 小时格式显示。

<TextClock
    android:id="@+id/hk_time"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:timeZone="GMT+0800"
    android:format24Hour="MMM dd, yyyy k:mm" />

还可以使用 TextClock 显示日期吗?

【问题讨论】:

    标签: android time clock


    【解决方案1】:

    我的设备使用 12h 格式。为了强制它使用 24 小时格式,我这样写:

    textClock.setFormat12Hour("kk:mm");
    

    【讨论】:

      【解决方案2】:

      如果您的系统处于 12 小时模式,则不必编写子类来获得所需的内容。 JavaDocs 说:

      • 在 12 小时模式下:
        • 非空时使用getFormat12Hour()返回的值
        • 否则,非空时使用getFormat24Hour()返回的值
        • 否则,请使用适合用户区域设置的默认值,例如 HH:mm

      因此,我希望最后一行使getFormat12Hour() 返回null,从而使用您的自定义getFormat24Hour() 格式:

      <android.widget.TextClock
          android:id="@+id/hk_time"
          android:layout_width="wrap_content"
          android:layout_height="wrap_content"
          android:timeZone="GMT+0800"
          android:format24Hour="MMM dd, yyyy k:mm"
          android:format12Hour="@null" />
      

      (顺便说一句,正如其他人所提到的,应谨慎使用强制格式。如果您的用户想要 24 小时制,他们会在系统偏好设置中指定这一点。以及强制数字格式、颠倒日期的应用程序他们用户的格式,如MM/dd/yyyy,邀请一星评级(在这种情况下,来自美国和菲律宾用户除外),所以你使用MMM是一件好事!你还是最好还是使用getBestDateTimePattern(),不过,我相信这需要继承 TextClock。)

      【讨论】:

      • Michael Scheper,我想知道如何从我的 textClock 中删除 PM 或 AM?
      • 查看日期格式字符串的所有选项:unicode.org/reports/tr35/tr35-dates.html#Date_Format_Patterns
      • @VictorRendina:确实。但再一次,应注意以独立于语言环境的方式使用这些选项。 h:mm a 会让居住在不使用 AM/PM 的地方的用户感到困惑,如果你硬编码 MM/dd/yyyy,那么大约 40% 的时间,美国和菲律宾以外的用户根本不会能够分辨出他们正在查看的日期具有外国格式。 数十亿人会认为您的应用程序错误或令人困惑,因此在大多数情况下,您应该使用full、long、short 等,而不是自定义的硬编码格式.
      【解决方案3】:

      对于 Kotlin

      我使用这条线将时间格式设置为 24 小时制,它工作正常。

      mTextClock.format12Hour = "kk:mm"
      

      【讨论】:

        【解决方案4】:

        我建议使用java文件而不是xml中的设置时间格式,即

        mTextClock.setFormat24Hour(format); 
        

        【讨论】:

          【解决方案5】:

          显示时间是 12 小时制还是 24 小时制取决于系统设置。也许您的 Android 设备或模拟器设置为 12 小时格式。这就是您的android:format24Hour被忽略的原因。如果您想通过覆盖系统设置来显示 24 小时格式(我不建议这样做),请添加 android:format12Hour="MMM dd, yyyy k:mm" 作为另一个属性。

          但是,始终建议根据系统设置显示时间和日期。如果您的应用程序中有一些其他(例如布局)约束需要单独处理 12 小时或 24 小时模式,您可以通过调用 TextClock 上的 is12HourModeEnabled() 或 is24HourModeEnabled() 在代码中动态检查设置。

          对于你的第二个问题,docs 说

          TextClock 可以将当前日期和/或时间显示为格式化的 字符串。

          这就是它的能力——显示时间和日期。如果您的意思是“与当前日期不同的日期”,则必须坚持使用简单的 TextView 并手动格式化日期字符串。

          【讨论】:

          • 我将如何更改它以添加日期?
          • 我不确定您对“日期”的理解,但如果您的意思是日、月和年,那不是已经包含在您的"MMM dd, yyyy k:mm" 格式中了吗?
          【解决方案6】:

          第一个问题:

          我刚刚检查过,您的设备上的设置时间:

          • 12 小时格式(美国、英国) - TextClock 为 12 小时
          • 24 小时格式(欧洲)-TextClock 是 24 小时

          如上所述,最好将选择权交给用户,而不是强迫他使用 ex。你最喜欢的格式。

          第二个问题:

          是的,是的。您只需要使用“android:format12Hour”和/或“android:format24Hour”。

          android:format12Hour="MMM dd, yyyy"
          android:format24Hour="MMM dd, yyyy"
          

          MMM 表示月份名称 3 个字符

          dd表示一天2个字符

          yyyy表示一年4个字符

          【讨论】:

            猜你喜欢
            • 2023-03-07
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2023-03-20
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多