当前位置: 首页 > 知识库问答 >
问题:

java.time.LocalDateTime到java.sql.日期

郜谦
2023-03-14

我试图实现java.time来解析不同的日期格式并返回为java.sql.日期。但是,如果我使用java.sql.Date.value(LocalDate date),我将失去时间。如何获得与java.sql.日期(java.util.日期date.get时间())相同的方式?我的应用程序中可能的格式是。

ormatter.of模式("yyyy-MM-dd");日期时间格式(DateTimeForware)=DateTimeFormatter.of模式("yyyy-MM-dd");日期时间格式(DateTimeForith)=DateTimeFormatter.of模式("yyyy-MM-dd'T'HH: mm: ssZ");日期时间格式(datetimeFormatterMil=DateTimeFormatter.of模式("yyyy-MM-dd'T'HH: mm: ss. SSSZ");

import java.sql.Date;
public Date oslcStringToDate(String str) throws ParseException
    {
        //remove colon in time zone
        Date date = null;
        if (!str.equalsIgnoreCase(NULL)) {
            int colonPos = str.length() - 3;
            str = str != null && str.length() > 3 && str.charAt(colonPos) == ':' ? 
                    str.substring(0, colonPos) + str.substring(colonPos + 1) 
                    : str.endsWith("Z") ? 
                        str.substring(0, str.length() - 1) + "+0000" 
                        : str;
            date = str.indexOf("T") > 0 ? 
                    str.indexOf(".") > 0 ? 
                        java.sql.Date.valueOf(LocalDateTime.parse(str, datetimeFormatterMil).toLocalDate())
                        : java.sql.Date.valueOf(LocalDateTime.parse(str, datetimeFormatter).toLocalDate())
                    : java.sql.Date.valueOf(LocalDateTime.parse(str, dateFormatter).toLocalDate());
        }
        return date;
    }

共有1个答案

商燕七
2023-03-14

如果我使用java。sql。日期valueOf(LocalDate-date)

永远不要将糟糕的遗留类与其替代类(JSR 310中定义的现代java.time类)混合在一起。

当递给遗留类的对象时,立即转换。您可以通过在旧类上找到的方法的值转换为…/。

LocalDate ld = myJavaSqlDate.toLocalDate() ;

而另一个方向。

java.sql.Date d = Date.valueOf( myLocalDate ) ;

JDBC 4.2及更高版本支持java。JDBC驱动程序中需要时间类。

所以只使用java.time类。不需要使用Date,也不需要CalendarSimpleDateFormatTimestamp等。

LocalDate类只表示一个日期,没有一天中的时间,没有时区或UTC的偏移量。因此,本地日期是一年、一个月和一天,仅此而已。

java.sql.Date类假装表示仅日期值。但是由于糟糕的设计决策,该类继承自java.util.Date,该类确实有一天中的时间。更令人困惑的是,java.util.Date类应该表示UTC中的一个时刻,但仍然包含生成文本时使用的一个时区。这些遗留类是如何不执行OOP的主类。

你说:

然而,如果我使用java,我就失去了时间。sql。日期valueOf(LocalDate-date)。

如果你是指得到的java。sql。Date没有一天中的任何时间,是的,当然,这是一个功能,而不是一个bug。如上所述,由于继承,这个类的对象实际上有一个日期,但这个类假装只有一个日期(年-月-日)。

你说:

我是如何实现与java相同的方式的。sql。日期(java.util.Date Date.getTime())?

我无法理解你在这里的目标。因此,在再次建议不要使用这些糟糕的遗留类之后,我将布局一些可能的类型以用于SQL。

 类似资料:
  • 主要内容:类声明,字段,类方法,方法继承类表示日历系统中没有时区的日期时间,例如。 类声明 以下是类的声明 - 字段 以下是类的字段 - - 支持的最大LocalDateTime:。 - 支持的最小LocalDateTime:。 类方法 编号 方法 描述 1 Temporal adjustInto(Temporal temporal) 调整指定的时态对象以使其具有与此对象相同的日期和时间。 2 OffsetDateTime atOffs

  • 问题内容: 到目前为止,我还没有找到明确的答案。 我想使用PreparedStatement知道SQL类型DATETIME和Java类型的等效项。 我发现:http : //www.java2s.com/Code/Java/Database-SQL- JDBC/StandardSQLDataTypeswithTheirJavaEquivalents.htm 但是它指出SQL类型“ DATETIME

  • 我正在尝试使用MongoDB和Spring数据在Spring Boot中运行我的应用程序,但我做不到,因为IntelliJ在构建期间向我显示了此错误: 错误:java:找不到java类型。sql。日期您是否缺少对类路径的依赖关系? 我正在使用mongo java驱动程序版本3.8.2,Spring boot2.1,项目在Java11。我不知道这里出了什么问题,有人能帮我吗?

  • 我使用的是<code>java.sql。Date将日期字段存储在我的一个域对象中。此字段映射到MySQL<code>DATE</code>列。当我试图通过Jackson将该字段序列化为JSON时,Jackson似乎没有考虑夏时制。 下面是我的域对象中的字段: 如您所见,杰克逊已被指示将时区解释为EST。我的MySQL数据库也使用EST时区: 我的问题是,对于夏令时开始和结束之间的日期,Jackso

  • 如何将从JDBC数据库返回的转换为?