gpt4 book ai didi

java - 在 Kotlin 中将日期字符串转换为所需的格式

转载 作者:行者123 更新时间:2023-12-03 08:20:44 24 4
gpt4 key购买 nike

我想将日期转换为所需的格式。我知道首先我需要转换为日期,然后需要格式化该日期。我的问题是以简单的形式进行的任何最简单的方法。对性能有影响吗?因为我的列表中有所有这些日期。

例如

fun main(vararg args: String) {
val dateString = "2021-05-12T12:12:12.121Z"
val convertedDate = convertDate(dateString)
print(
convertedDate?.let {
formatDate(it)
}
)
}

fun formatDate(date: Date): String {
return SimpleDateFormat("MMM dd, YYYY").format(date)
}

fun convertDate(dateString: String): Date? {
return SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'").parse(dateString)
}

输出

May 12, 2021

最佳答案

标准日期时间类没有任何属性来保存格式信息。即使某些库或自定义类 promise 这样做,它也打破了 Single Responsibility Principle 。日期时间对象应该存储有关日期、时间、时区等的信息,而不是关于格式的信息。以所需格式表示日期时间对象的唯一方法是将其格式化为 String 使用日期时间解析/格式化类型:

  • 对于现代日期时间 API:java.time.format.DateTimeFormatter
  • 对于旧版日期时间 API:java.text.SimpleDateFormat

请注意 java.util日期时间 API 及其格式化 API,SimpleDateFormat已经过时且容易出错。建议完全停止使用并切换到 modern Date-Time API *,于 2014 年 3 月作为 Java SE 8 标准库的一部分发布。

除此之外,您的代码还有很多问题:

  1. 使用Y (周年)而不是 y (年)。检查documentation了解更多信息。
  2. 不使用LocaleSimpleDateFormat 。检查Never use SimpleDateFormat or DateTimeFormatter without a Locale了解更多信息。
  3. 附上Z单引号内意味着它只是一个字 rune 字,除了代表字母 Z 之外没有任何意义。 。模式,yyyy-MM-dd'T'HH:mm:ss.SSS'Z'应该是yyyy-MM-dd'T'HH:mm:ss.SSSXXX .

使用 java.time 的解决方案,现代日期时间 API:

import java.time.OffsetDateTime;
import java.time.format.DateTimeFormatter;
import java.util.Locale;

public class Main {
public static void main(String[] args) {
var dateString = "2021-05-12T12:12:12.121Z";
var odt = OffsetDateTime.parse(dateString);
var dtf = DateTimeFormatter.ofPattern("MMM dd, uuuu", Locale.ENGLISH);
System.out.println(dtf.format(odt));
}
}

输出:

May 12, 2021

ONLINE DEMO

在这里,您可以使用y而不是u但是I prefer u to y .

Trail: Date Time 了解有关现代日期时间 API 的更多信息


* 无论出于何种原因,如果您必须坚持使用 Java 6 或 Java 7,则可以使用 ThreeTen-Backport它将大多数 java.time 功能向后移植到 Java 6 和 7。如果您正在从事 Android 项目,并且您的 Android API 级别仍然不符合 Java-8,请检查 Java 8+ APIs available through desugaringHow to use ThreeTenABP in Android Project

关于java - 在 Kotlin 中将日期字符串转换为所需的格式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67940434/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com