如何格式化 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
详细了解 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。
我正在将一些代码从使用 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
详细了解 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。