【问题标题】:Kotlin Android / Java String DateTime Format, API21Kotlin Android / Java String DateTime 格式,API21
【发布时间】:2019-05-15 19:24:53
【问题描述】:

我想将字符串日期时间转换为格式化字符串。 例如“2018-12-14T09:55:00”到“14.12.2018 09:55”作为字符串 => Textview.text

如何使用 kotlin 或 java for android 做到这一点?

【问题讨论】:

  • 你已经做了什么?
  • -2 是什么?真的吗??
  • 我没有投反对票。我的猜测是现在的 -3 是因为缺乏搜索和研究工作。如何将日期时间字符串从一种格式更改为另一种格式已在 Stack Overflow 上被多次询问和回答,并且在 Internet 上的许多其他地方也有展示。因此,一个不太大的搜索工作可能会更快地为您提供一个更好的起点,也许足以让您调整自己找到的代码 sn-ps,如果这造成了问题,那么您在这里的问题看起来会完全不同。跨度>

标签: java android datetime kotlin java-time


【解决方案1】:

解析为LocalDateTime然后格式化:

LocalDateTime localDateTime = LocalDateTime.parse("2018-12-14T09:55:00");
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd.MM.yyyy HH:mm");
String output = formatter.format(localDateTime);

如果这不适用于 api21,您可以使用:

SimpleDateFormat parser = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss");
SimpleDateFormat formatter = new SimpleDateFormat("dd.MM.yyyy HH:mm");
String output = formatter.format(parser.parse("2018-12-14T09:55:00"));

或导入 ThreeTenABP。

【讨论】:

  • 我已经尝试过了。但是我在 LocalDateTime.parse 上给出一个错误:“调用需要 api 级别 26,当前 api 是 21”
  • 这是否适用于 API 级别 21?当您将 ThreeTenABP 添加到您的 rproject 并确保导入 org.threeten.bp.LocalDateTimeorg.threeten.bp.format.DateTimeFormatter 时,它会发生这种情况。
  • 很好用。我在您的个人资料中读到您在土耳其的伊兹密尔,因此您正在寻求您所在地区的日期时间格式(明智的)。这是内置在 Java 中的。所以我建议DateTimeFormatter formatter = DateTimeFormatter.ofLocalizedDateTime(FormatStyle.SHORT).withLocale(Locale.forLanguageTag("tr"));。它更长,但避免手动输入格式模式字符串是值得的,而且这也更适合国际化。
  • 迄今为止的最佳答案。谢谢
  • 您不需要使用 ThreeTenABP,请参考:developer.android.com/studio/write/…
【解决方案2】:

Kotlin API 级别 26 或更高:

val parsedDate = LocalDateTime.parse("2018-12-14T09:55:00", DateTimeFormatter.ISO_DATE_TIME)
val formattedDate = parsedDate.format(DateTimeFormatter.ofPattern("dd.MM.yyyy HH:mm"))

API 级别 26 以下:

val parser =  SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss")
val formatter = SimpleDateFormat("dd.MM.yyyy HH:mm")
val formattedDate = formatter.format(parser.parse("2018-12-14T09:55:00"))

【讨论】:

  • 24以下的api lvl怎么办?似乎 SimpleDateFormat 不是一个选项
  • 哪个包? java.textandroid.icu.text?
  • 似乎是java.textandroid.icu.text 只是充满了存根,嗯!?
【解决方案3】:

如果您有一个表示特定时区值的日期时间,但该时区未在日期时间字符串本身中编码(例如,“2020-01-29T09:14:32.000Z”)并且您需要在您拥有的时区(例如 CDT)中显示它

val parsed = ZonedDateTime.parse("2020-01-29T09:14:32.000Z", DateTimeFormatter.ISO_DATE_TIME).withZoneSameInstant(ZoneId.of("CDT"))

parsed ZoneDateTime 将反映给定的时区。例如,此日期类似于 2020 年 1 月 28 日上午 8:32。

【讨论】:

    【解决方案4】:

    在 kotlin 中,你可以通过这种方式将字符串格式化为日期:-

    val simpleDateFormat = SimpleDateFormat("yyyy/MM/dd HH:mm:ss",Locale.getDefault())
    val date = SimpleDateFormat("yyyy/MM/dd", Locale.getDefault()).format(simpleDateFormat.parse("2022/02/01 14:23:05")!!)
    

    应该导入 java.text.SimpleDateFormat 以便 SimpleDateFormat 类在 api 21 上工作

    【讨论】:

      猜你喜欢
      • 2011-04-20
      • 2013-09-24
      • 2012-11-17
      • 1970-01-01
      • 1970-01-01
      • 2018-08-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多