如何格式化 kotlinx-datetime LocalDateTime?

How can you format a kotlinx-datetime LocalDateTime?

我正在将一些代码从使用 Java 8 的 LocalDatetime 转换为使用 kotlinx-datetime 的版本,但我找不到任何格式化方法。具体来说,我要替换 FormatStyle.MEDIUM。它们不存在,我需要编写格式吗?

这适用于 Android 应用。是否有 Android 个我可以使用的特定库?或者我可以使用 pre-Java 8 方法来保持对旧版本 Android 的支持吗?

编辑(我的解决方案基于 Arvind 的回答):

fun Instant.toDateTimeString(formatStyle: FormatStyle = FormatStyle.MEDIUM): String {
    val localDatetime = toLocalDateTime(TimeZone.currentSystemDefault())
    val formatter = DateTimeFormatter.ofLocalizedDateTime(formatStyle)
    return formatter.format(localDatetime.toJavaLocalDateTime())
}

根据 documentation, in a JVM, the implementation of date/time types, such as Instant, LocalDateTime, TimeZone and so on, relies on java.time API. It also natively supports ThreeTen backport project using which you can backport most of the java.time functionality to Java 6 & 7. Check 了解如何设置。

如果您想替换 OOTB(开箱即用)格式,例如 FormatStyle.MEDIUM,您始终可以使用 DateTimeFormatter 定义自定义格式,例如

import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.time.format.FormatStyle;
import java.util.Locale;

public class Main {
    public static void main(String[] args) {
        DateTimeFormatter dtf = DateTimeFormatter.ofLocalizedDateTime(FormatStyle.MEDIUM, FormatStyle.MEDIUM);

        // Custom equivalent format with a fixed Locale
        DateTimeFormatter dtfCustom = DateTimeFormatter.ofPattern("d MMM uuuu, HH:mm:ss", Locale.ROOT);

        LocalDateTime ldt = LocalDateTime.now();

        System.out.println(ldt.format(dtf));
        System.out.println(ldt.format(dtfCustom));
    }
}

输出:

6 Nov 2021, 12:18:26
6 Nov 2021, 12:18:26

ONLINE DEMO

详细了解 modern Date-Time API* from Trail: Date Time


* 如果您正在为一个 Android 项目工作并且您的 Android API 级别仍然不符合 Java-8,请检查Java 8+ APIs available through desugaring. Note that Android 8.0 Oreo already provides support for java.time. Check this answer and this answer 学习如何使用 java.time API 和 JDBC。