java - 如何将 LocalDate 转换为特定的日期时间格式
问题描述
如何将 ISO_LOCAL_DATE 转换为日期时间格式:yyyy-MM-dd'T'HH:mm:ss.SSSZ in java
例如:给定日期:2016-01-25 到 2016-01-25T00:00:00.000+0100
解决方案
我假设有一个字符串,例如2016-01-25
,并且您想要一个包含 JVM 默认时区中一天开始的字符串(从问题中不清楚)。我首先为您想要的格式定义一个格式化程序(它是 ISO 8601):
private static DateTimeFormatter formatter
= DateTimeFormatter.ofPattern("uuuu-MM-dd'T'HH:mm:ss.SSSxx");
现在您的转换进行了:
String isoLocalDateString = "2016-01-25";
LocalDate date = LocalDate.parse(isoLocalDateString);
ZonedDateTime dateTime = date.atStartOfDay(ZoneId.systemDefault());
String dateTimeString = dateTime.format(formatter);
System.out.println(dateTimeString);
在我的时区 Europe/Copenhagen 运行时,此示例代码的输出是您所要求的:
2016-01-25T00:00:00.000+0100
在夏令时 (DST) 从一天的第一刻开始的极少数情况下,一天中的时间不会是 00:00:00.000。
对于解析,ISO_LOCAL_DATE
我们不需要指定格式化程序,因为此格式化程序是LocalDate.parse()
.
综上所述,您通常不应该将日期从一种字符串格式转换为另一种字符串格式。在您的程序中,将日期作为LocalDate
对象保存。当您获得字符串输入时,解析为LocalDate
. 只有当你需要给出字符串输出时,例如在与另一个系统进行数据交换时,才格式化成所需格式的字符串。
链接: 维基百科文章:ISO 8601
推荐阅读
- flutter - 在颤动中无法从 dataforseo api 获得 page_metrics 响应。代码在颤动中执行空值
- python-3.x - 导入'app'文件夹时烧瓶应用程序中的ModuleNotFoundError
- c# - 在 C# 中使用 Url 编码的字符串创建新的 Uri
- android - 如何从 Back Press 的 Activity 中返回 Fragment
- opengl - 如何读取系统的 openGL 常量
- flutter - 运行项目时出现错误提示 nullok 错误并且依赖项本身有错误?
- random - RGB 值中的浅色范围是多少?
- react-native - 当我尝试使用 useState 查看我的文本时,为什么会出现错误?
- flutter - Flutter的List.generate在不指定类型时返回什么类型?
- ruby-on-rails - rails 按特定顺序排序