【问题标题】:Java Date.toString in Oracle's TO_DATEOracle 的 TO_DATE 中的 Java Date.toString
【发布时间】:2017-04-11 22:36:53
【问题描述】:

在美国语言环境中,Date.toString() 的默认格式似乎是:

Thu Nov 24 15:20:52 CET 2016

Oracle 数据库有一个函数“TO_DATE”,允许从字符串转换为日期。第一个参数是日期格式。

映射 Java Date.toString() 字符串的正确日期格式是什么?是吗:

DAY MONTH DD HH24:MI:SS TZD YYYY

?

谢谢。

【问题讨论】:

  • 从Java访问数据库时,需要使用JDBC的set/getTimestamp(或set/getDate)方法,而不是设置字符串值。
  • 直播并不总是完美的:-)。我无法控制java代码和传递的值,我只能配置oracle“to_date”格式字符串。

标签: java string oracle date


【解决方案1】:

在 Java 中,使用 toString() 方法的默认日期格式为 EEE MMM dd HH:mm:ss zzz yyyy。我不知道为什么,但 Oracle 不支持解析语法 'EEE','MMM' 和 'zzz' 。

阅读更多:Table 9-4 Datetime Format Elements

【讨论】:

    【解决方案2】:

    Oracle DATE 数据类型没有时区 - 您需要 TIMESTAMP WITH TIMEZONE 数据类型:

    SELECT TO_TIMESTAMP_TZ(
             'Thu Nov 24 15:20:52 CET 2016',
             'DY MON DD HH24:MI:SS TZR YYYY'
           )
    FROM DUAL
    

    如果要转换为DATE(并且时区始终为CET),则可以使用:

    SELECT TO_DATE(
             'Thu Nov 24 15:20:52 CET 2016',
             'DY MON DD HH24:MI:SS "CET" YYYY'
           )
    FROM DUAL
    

    如果您希望它作为 DATE 数据类型并尊重原始字符串中的时区,那么您需要 (1) 将其转换为 TIMESTAMP WITH TIMEZONE 数据类型; (2) 将该值转换为标准化时区(通常使用 UTC);然后(3)将其转换为日期:

    SELECT CAST(
             TO_TIMESTAMP_TZ(
               'Thu Nov 24 15:20:52 CET 2016',
               'DY MON DD HH24:MI:SS TZR YYYY'
             )
             AT TIME ZONE 'UTC'
             AS DATE
           )
    FROM   DUAL;
    

    这将输出日期2016-11-24 14:20:52(输入日期的UTC表示)。

    【讨论】:

    • 感谢答案。在第二个例子中,“CET”不能是 TZD ?
    • @pasabaporaqui 当您使用 TO_DATE 时不是,因为 DATE 数据类型没有时区,因此它不理解 TZD 格式掩码(您将收到 ORA-01821: date format not recognized 异常)。
    • @pasabaporaqui 添加了一个编辑以在将时区转换为日期之前对其进行标准化。
    • 我在 Google 上找不到语法 TO_TIMEZONE_TZ,但 GG 建议我使用其他方法 TO_TIMESTAMP_TZ。我已经使用 SQL Navigator 进行了尝试,并且成功了。那么,你能给我解释一下语法 TO_TIMEZONE_TZ 吗?
    • @tuyendev 谢谢,是的,应该是TO_TIMESTAMP_TZ - 从另一个系统输入,我输入了错误的函数名称。现已更正。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-06-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-02
    相关资源
    最近更新 更多