【问题标题】:How to change time format from 24h to 12h [duplicate]如何将时间格式从 24 小时更改为 12 小时 [重复]
【发布时间】:2021-08-05 09:48:07
【问题描述】:

我正在使用 TextView 设置日期和时间以及日期名称,但时间显示为 24 小时,我想将其设置为 12 小时格式。谁能帮我改一下这种格式。

textDateTime.setText(new SimpleDateFormat("EEEE, dd MMMM yyyy HH:mm a", Locale.getDefault()).format(new Date()));

【问题讨论】:

  • 顺便考虑扔掉长期过时且臭名昭著的麻烦SimpleDateFormat和朋友。看看您是否可以使用desugaring 或将ThreeTenABP 添加到您的Android 项目中,以便使用现代Java 日期和时间API 的java.time。使用起来感觉好多了。

标签: java android datetime-format


【解决方案1】:

tl;博士

使用现代 java.time 类。

自动本地化而不是硬编码格式。

LocalTime
.now()
.format(
    DateTimeFormatter.ofLocalizedTime( FormatStyle.SHORT )
)

看到这个code run live at IdeOne.com

下午 5:08

避免遗留类

永远不要使用糟糕的DateSimpleDateFormat 类。这些在几年前被 JSR 310 中定义的现代 java.time 类所取代。

java.time

您似乎希望在特定时区看到当前时间。时区至关重要。对于任何特定时刻,时间(和日期)在全球各地因时区而异。

ZoneId z = ZoneId.systemDefault() ;  // Or ZoneId.of( "America/Edmonton" )
LocalTime now = LocalTime.now( z ) ;

java.time为你自动本地化。

Locale locale = Locale.CANADA_FRENCH ;  // Or Locale.US etc.
DateTimeFormatter f = DateTimeFormatter.ofLocalizedTime( FormatStyle.SHORT ).withLocale( locale ) ;
String output = now.format( f ) ;

关于java.time

java.time 框架内置于 Java 8 及更高版本中。这些类取代了麻烦的旧 legacy 日期时间类,例如 java.util.DateCalendarSimpleDateFormat

要了解更多信息,请参阅Oracle Tutorial。并在 Stack Overflow 上搜索许多示例和解释。规格为JSR 310

Joda-Time 项目现在位于maintenance mode,建议迁移到java.time 类。

您可以直接与您的数据库交换 java.time 对象。使用符合JDBC 4.2 或更高版本的JDBC driver。不需要字符串,不需要java.sql.* 类。 Hibernate 5 & JPA 2.2 支持 java.time

从哪里获取 java.time 类?

【讨论】:

    【解决方案2】:

    这与您输入SimpleDateFormat 的格式有关,因为您使用的是HH(24 小时制)。试试hh(12 小时制)。 请参阅related answerthe doc

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-10-26
      • 2021-12-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-11-11
      相关资源
      最近更新 更多