如何在java中将任何日期时间格式解析为yyyy MM dd

如何在java中将任何日期时间格式解析为yyyy MM dd,java,date-formatting,Java,Date Formatting,我有一个动态填充的日期字段,我需要该字段的格式为yyyy-MM-dd 对于格式为1994-08-01 14:37:44的输入日期,这是一个例外 java.time.format.DateTimeParseException: Text '1994-08-01 14:37:44' could not be parsed, unparsed text found at index 10 这是我尝试的许多其他方法之一LocalDateTime.parse(“1994-08-01 14:37:44”,

我有一个动态填充的日期字段,我需要该字段的格式为
yyyy-MM-dd

对于格式为1994-08-01 14:37:44的输入日期,这是一个例外

java.time.format.DateTimeParseException: Text '1994-08-01 14:37:44' could not be parsed, unparsed text found at index 10
这是我尝试的许多其他方法之一
LocalDateTime.parse(“1994-08-01 14:37:44”,DateTimeFormatter.ofPattern(yyyy-MM-dd))

是否有办法将所有日期/日期时间转换为yyyy-MM-dd格式

请帮忙


谢谢

像这样试试。您可以提取
LocalDate
部分

LocalDate ldt = LocalDateTime.parse("1994-08-01 14:37:44",
                DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
        
System.out.println(ldt.format(DateTimeFormatter.ofPattern("yyyy-MM-dd")));
印刷品

1994-08-01

像这样试试。您可以提取
LocalDate
部分

LocalDate ldt = LocalDateTime.parse("1994-08-01 14:37:44",
                DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
        
System.out.println(ldt.format(DateTimeFormatter.ofPattern("yyyy-MM-dd")));
印刷品

1994-08-01

您有一个日期和时间组件,但仅使用日期格式将其解析为
LocalDateTime
值,这将失败,因为
LocalDateTime
需要时间组件才能工作

从分析全文开始

String input = "1994-08-01 14:37:44";
LocalDateTime ldt = LocalDateTime.parse(input, DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
然后使用
DateTimeFormatter
将其格式化为您想要的格式

String formatted = DateTimeFormatter.ofPattern("yyyy-MM-dd").format(ldt);
System.out.println(formatted);
哪张照片

1994-08-01
根据您的需要,您还可以将
LocalDateTime
值转换为
LocalDate
并对其进行格式化,这是相同的结果,但您可能需要
LocalDate
进行其他操作,谁知道呢

String formatted = ldt.toLocalDate().format(DateTimeFormatter.ofPattern("yyyy-MM-dd"));

您有一个日期和时间组件,但仅使用日期格式将其解析为
LocalDateTime
值,这将失败,因为
LocalDateTime
需要时间组件才能工作

从分析全文开始

String input = "1994-08-01 14:37:44";
LocalDateTime ldt = LocalDateTime.parse(input, DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
然后使用
DateTimeFormatter
将其格式化为您想要的格式

String formatted = DateTimeFormatter.ofPattern("yyyy-MM-dd").format(ldt);
System.out.println(formatted);
哪张照片

1994-08-01
根据您的需要,您还可以将
LocalDateTime
值转换为
LocalDate
并对其进行格式化,这是相同的结果,但您可能需要
LocalDate
进行其他操作,谁知道呢

String formatted = ldt.toLocalDate().format(DateTimeFormatter.ofPattern("yyyy-MM-dd"));


LocalDateTime
需要一个时间组件才能解析字符串我尝试过
LocalDate
但它适用于
yyyy-MM-dd
格式的日期输入,但无法用于日期时间输入。您的输入是日期/时间值。您正在使用的格式化程序只考虑日期部分,而
LocalDateTime
同时需要这两个部分。对整个字符串使用格式化程序,
yyyy-MM-dd HH:MM:ss
,然后您可以以任何方式格式化值-从您拥有的开始,朝着您想要的方向努力。所有这些答案的关键是:您需要担心两种不同的格式。您需要担心输入格式(即进入
LocalDateTime.parse(…)
)的格式),然后一旦有了合适的对象,就可以使用输出格式创建字符串(将其传递到
yourLocalDateTime.format(…)
)。但是,没有一种方法可以“转换所有日期/日期时间”。为了处理输入,您需要先了解输入的结构。您的字段是否始终采用
uu MM dd HH:MM:ss
格式?如果您不知道格式,通常无法对其进行分析。
LocalDateTime
需要一个时间组件才能分析字符串。我尝试过
LocalDate
但它适用于
yyyy-MM-dd
格式的日期输入,但对datetime输入失败。您的输入是日期/时间值。您正在使用的格式化程序只考虑日期部分,而
LocalDateTime
同时需要这两个部分。对整个字符串使用格式化程序,
yyyy-MM-dd HH:MM:ss
,然后您可以以任何方式格式化值-从您拥有的开始,朝着您想要的方向努力。所有这些答案的关键是:您需要担心两种不同的格式。您需要担心输入格式(即进入
LocalDateTime.parse(…)
)的格式),然后一旦有了合适的对象,就可以使用输出格式创建字符串(将其传递到
yourLocalDateTime.format(…)
)。但是,没有一种方法可以“转换所有日期/日期时间”。为了处理输入,您需要先了解输入的结构。您的字段是否始终采用
uu MM dd HH:MM:ss
格式?如果您不知道格式,通常无法解析它。我只需要yyyy MM ddIMHO格式的日期部分,我不会依赖对象的
toString
表示,它可能会在区域设置或实现之间更改-只是saying@MadProgrammer我花了几秒钟才明白你在说什么。我同意。相应地修改了答案。谢谢有很好的文档记录了
LocalDate.toString()
返回的内容,所以这一点不应该改变。你是否想依赖它可能更取决于你的品味。不需要
toLocalDate()
。只要您使用的是
DateTimeFormatter
类而不是
toString()
,原始的
LocalDateTime
对象就可以正常工作。如果可能的话,应该在输出时准备输出。我只需要它的日期部分,格式为yyyy MM ddIMHO,我不会依赖对象的
toString
表示,它可能在区域设置或实现之间更改-只要saying@MadProgrammer我花了几秒钟才明白你在说什么。我同意。相应地修改了答案。谢谢有很好的文档记录了
LocalDate.toString()
返回的内容,所以这一点不应该改变。你是否想依赖它可能更取决于你的品味。不需要
toLocalDate()
。只要您使用的是
DateTimeFormatter
类而不是
toString()
,原始的
LocalDateTime
对象就可以正常工作。如果可能的话,应该在输出时准备输出。我认为“
LocalDateTime
需要时间组件才能工作”是不正确的。分析失败的原因是输入与提供的显式格式不匹配。@AndrewF False和true<代码>本地日期时间
certai