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

正在转换java。util。日期到java。sql。导致日期更改的日期[重复]

晋天逸
2023-03-14

我在尝试将java.util.Date转换为java.sql.Date时遇到了一些问题。传入的date参数最初是以下格式的字符串:2019-01-31。然后我尝试使用以下代码将其转换为java.util.date:

    SimpleDateFormat formatter = new SimpleDateFormat("YYYY-MM-DD");
    Date date = null;
    try {
        date =  formatter.parse(this._dDate);
    } catch (ParseException e) {
        e.printStackTrace();
    }

在我的SQL语句中,我试图将其转换为java。sql。日期:

buffer.append("SELECT * FROM TABLE1 WHERE LAST_LOGIN_DT < ");
buffer.append("TO_DATE('" + new java.sql.Date(date.getTime()) + "','YYYY-MM-DD') ");

然而,当我以字符串形式打印出缓冲区时,我意识到日期已更改。例如,我传入的数据字符串是2018-01-01,但在SQL语句中它变成了2017-12-31。有什么想法吗?

谢谢

共有1个答案

孙德宇
2023-03-14

首先让我们看一下以下示例:

String date = "2018-01-01";

SimpleDateFormat sdf1 = new SimpleDateFormat("YYYY-MM-DD");
System.out.println(sdf1.parse(date));
System.out.println(sdf1.parse(date).getYear());
System.out.println(sdf1.parse(date).getMonth());
System.out.println(sdf1.parse(date).getDay());

SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy-MM-dd");
System.out.println(sdf2.parse(date));
System.out.println(sdf2.parse(date).getYear());
System.out.println(sdf2.parse(date).getMonth());
System.out.println(sdf2.parse(date).getDay());

控制台输出:

星期日12月31 00:00:00CST 2017
117
11
0
星期一1月01 00:00:00CST 2018
118
0
1

现在我想你已经注意到了差异<引用自SimpleDataFormat类:

Y表示一年中的一周,D表示一年中的一天

yyyy和yyyy都表示一年,但yyyy表示日历年,而yyyy表示一周中的一年。dd表示日历日,dd表示一个月中的某一天。因此,有两种方法可以解决您的问题:

方法1如果仍要转换,请将SimpleDataFormat的格式从YYYY-MM-DD更改为YYYY-MM-DD_将html" target="_blank">数据转换为java。util。日期,然后是java。sql。日期,但我强烈建议您不要这样做。

方法2
更好的方法是直接使用java.sql.Date.valueOf(this._dDate)this._dDate的格式应该是yyyy-MM-dd。

 类似资料:
  • 问题内容: 如何将特定日期从Java存储到数据库?(不仅是今天的日期,而且还有用户想要指定的一些日期) 问题答案: 用 类型和被假定分别用于设置日期和时间戳字段。阅读他们的文档,了解它们之间以及与和之间的区别。 通常,您会从用户那里获得一个Java日期()。您使用将该时间转换为自纪元以来的毫秒数,然后转换回a 或如我所示。

  • 我正在尝试将java Date转换为java LocalTime,我的代码如下所示 当我打印对话前后的日期时,看起来是这样的: 它看起来像是在向后转换,但我不知道怎么做!

  • 问题内容: 我的json 响应 包含一个 CreatedOn 日期: 我需要将 CreatedOn 转换为简单的日期格式,并 计算从CreatedOn日期到当前日期的差异天数。 当我调试下面的代码字符串 CreatedOn时 显示一个空值。怎么会? 问题答案: 要么 考虑使用JSON方法而不是包含。JSON具有“ has()”,用于验证密钥是否存在。 您还应该确保首先尝试{}捕获{}字符串,以确保

  • 问题内容: 我在任何地方都找不到。我从返回标准JSON日期的API中获取了一些JSON。您可以通过在JavaScript控制台中运行以下代码来查看格式: 好吧,实际上,我正在使用的API不会返回毫秒部分,有时会返回一个时区而不是,因此日期看起来可能像以下任何一个: 解析这些日期有点麻烦。有没有办法使用解析这些日期? 我当前的解决方案是: 啊! 问题答案: 该DateTime格式实际上是ISO 86

  • 我正在尝试转换java。util。日期至java。时间本地日期: 但是,当有例如22:25的一天时间时,我选择ZoneId,例如:。 即将推出的本地日期将有不同的日期(因为该区域增加了6小时),例如欧洲/明斯克: 我想在结果的LocalDate中保留与该实例相同的日期。一些方法如何解决这个问题?我想可能有几种方法。

  • 为什么java。util。日期对象显示日期 在docs中,还有一个java。util。Date实例没有时区的概念。 如果是这样,为什么这个片段打印日期指定时区。 输出:2017年3月22日星期三14:58:56 为什么它在输出中显示特定的时区?我理解SOP在内部实现了toString()。toString()会影响时区吗?