英文:
Cannot convert date type yyyy-MM-dd to LocalDateTime in Java
问题
我从用户那里获取一个日期输入,其类型为yyyy-MM-dd(例如:2023-02-26)。我尝试将其转换为LocalDateTime格式,以便得到类似以下格式的内容,2023-02-26 22:03:05.034981
我尝试过在线上提供的示例,如下所示。
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
LocalDateTime createdDate = LocalDateTime.parse(projectSearchCriteria.getCreatedDate(), formatter);
但是出现以下错误
Caused by: java.time.format.DateTimeParseException: Text '2023-02-26' could not be parsed at index 10
对于如何解决这个问题有任何想法吗。
====================== 附加信息 ===================
我已将字符串输入转换为LocalDate
但仍然出现以下错误
这是因为数据库中有LocalDateTime格式
是否有特定的方法可以使用2023-02-26在数据库中找到类似2023-02-26 22:03:05.034981的内容?
英文:
I am getting a date input from the user which is of type yyyy-MM-dd (e.g: 2023-02-26). I am trying to convert it to LocalDateTime format so that I will get something like this format, 2023-02-26 22:03:05.034981
I have tried examples available online like below.
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
LocalDateTime createdDate = LocalDateTime.parse(projectSearchCriteria.getCreatedDate(), formatter);
But getting below error
Caused by: java.time.format.DateTimeParseException: Text '2023-02-26' could not be parsed at index 10
Any ideas on how to get this issue fixed.
====================== Additional Info ===================
I have converted so that the string input is now parsed to a LocalDate
But still it gives the below error
This is because I have the LocalDateTime format in the database
Is there any specific way how I can use the 2023-02-26 to find something like 2023-02-26 22:03:05.034981 in the database?
答案1
得分: 1
tl;dr
LocalDateTime.of(
LocalDate.parse("2023-02-26"),
LocalTime.parse("22:03:05.034981")
)
Details
LocalDateTime format so that I will get something like this format, 2023-02-26 22:03:05.034981
你混淆了日期时间对象和格式化文本。日期时间对象不是文本,没有格式。
日期时间类可用于解析文本片段,提取含义并实例化日期时间对象。但原始文本将被丢弃。日期时间对象和String
对象是完全不同的。
I am getting a date input from the user which is of type yyyy-MM-dd (e.g: 2023-02-26)
因此,将输入文本解析为LocalDate
,这是一个仅包含日期而没有时间和时间区域或UTC偏移的值。
LocalDate ld = LocalDate.parse("2023-02-26");
显然,您想要附加一个特定的时间(您未清楚描述原因)。首先,解析有关时间的文本输入。
LocalTime lt = LocalTime.parse("22:03:05.034981");
👉 将这两者合并为LocalDateTime
。
LocalDateTime ldt = LocalDateTime.of(ld, lt);
Is there any specific way how I can use the 2023-02-26 to find something like 2023-02-26 22:03:05.034981 in the database?
您是否想在数据库中搜索与日期和时间完全匹配的内容?
首先,请确保数据库表列的数据类型类似于SQL数据类型TIMESTAMP WITHOUT TIME ZONE
。验证WITHOUT部分,而不是WITH。
然后,使用通过准备好的语句传递值的?
语法编写SQL查询。
String sql =
"""
SELECT *
FROM some_table_
WHERE date_time_ = ?
;
"""
;
查询。
myPreparedStatement.setObject(1, ldt);
检索找到的行。
LocalDateTime ldt = myResultSet.getObject(…, LocalDateTime.class);
另外...请注意,LocalDateTime
对象是模糊的和不明确的。在没有区域或偏移的情况下,LocalDateTime
对象无法表示一个时刻,不是时间轴上的一个点。
英文:
tl;dr
LocalDateTime.of(
LocalDate.parse( "2023-02-26" ) ,
LocalTime.parse( "22:03:05.034981" )
)
Details
> LocalDateTime format so that I will get something like this format, 2023-02-26 22:03:05.034981
You are confusing date-time objects with formatted text. A date-time object is not text, and has no format.
A date-time class can be used to parse a piece of text, extract meaning, and instantiate a date-time object. But the original text is discarded. Date-time objects and String
objects are entirely separate and distinct.
>I am getting a date input from the user which is of type yyyy-MM-dd (e.g: 2023-02-26)
So parse that input text as a LocalDate
, a date-only value without a time-of-day and without the context of a time zone or offset-from-UTC.
LocalDate ld = LocalDate.parse( "2023-02-26" ) ;
Apparently you want to attach to that date a particular time-of-day (for reasons you do not describe clearly). First parse your text input for that time-of-day.
LocalTime lt = LocalTime.parse( "22:03:05.034981" ) ;
👉 Combine the two into a LocalDateTime
.
LocalDateTime ldt = LocalDateTime.of( ld , lt ) ;
>Is there any specific way how I can use the 2023-02-26 to find something like 2023-02-26 22:03:05.034981 in the database?
Do you mean search the database for that exact date and time?
First, be sure the database table column is of a data type akin to the SQL data type TIMESTAMP WITHOUT TIME ZONE
. Verify the WITHOUT part, rather than WITH.
Then write your SQL query with the ?
syntax for passing a value via a prepared statement.
String sql =
"""
SELECT *
FROM some_table_
WHERE date_time_ = ?
;
"""
;
Query.
myPreparedStatement.setObject( 1 , ldt ) ;
Retrieve found rows.
LocalDateTime ldt = myResultSet.getObject( … , LocalDateTime.class ) ;
By the way… Be aware that a LocalDateTime
object is ambiguous and indefinite. Without the context of a zone or offset, a LocalDateTime
object cannot represent a moment, is not a point on the timeline.
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论