使用 Oracle 和 .NET 的时区时间/日期格式

本文关键字:时间 日期 格式 时区 Oracle NET 使用 | 更新日期: 2023-09-27 18:34:18

我是甲骨文的新手,希望有人能为我澄清这种情况。

我编写了一个非常大的查询,它返回一组日期(Oracle 10g(。

在 SQL 开发人员中,这些日期以 DD-MON-YY 格式显示(例如:"12-MAY-12"(。SQL 开发人员中字段的数据类型显示它是日期类型,并且选中了简单单选按钮。当我在 SQL 开发人员中运行此查询时,我得到的日期如下所示:

11-

五月-12

我在属于 C# Web 服务的程序集中使用此查询。我们的QE服务器所在的离岸团队中的某个人注意到该字段的值正在转换为IST偏移量(它使用数据集的GetXml转换为XML(。问题是,我什至不知道偏移量的存在,直到我在调试器中检查输出,因为我在 SQL 开发人员中看不到它。它是这样过来的:

2012-05-11T06:09:15+05:30

没有使用固有的日期

转换函数,只使用提取日期的字段的名称。

如何修改查询,以便在运行查询时不考虑偏移量(我们确实需要保留日期的时间部分(?我知道这个问题听起来很复杂,但最终结果是写入海外另一个数据库的数据包含错误的偏移量,因此它被转换为偏差 1 天的日期。

基本上我想要时间而不是偏移量。

使用 Oracle 和 .NET 的时区时间/日期格式

Oracle

DATE具有日期和时间部分,但没有时区。 TIMESTAMP WITH [LOCAL] TIME ZONE将具有时区,并且还将具有亚秒级精度。

您可以通过几种不同的方式更改将DATE数据转换为字符串以显示的方式。 首先,它使用显式TO_CHAR

SELECT to_char( <<your_date_column>>, 'YYYY-MM-DD HH24:MI:SS' )
  FROM your_table

其次,您可以更改会话的NLS_DATE_FORMAT,以便会话始终以特定格式显示数据

ALTER SESSION SET nls_date_format = 'yyyy-mm-dd hh24:mi:ss';
SELECT <<your_date_column>>
  FROM your_table

第三,在 SQL Developer 中,可以更改它用于显示DATE数据的字符串格式。 如果你去Tools | Preferences | Database | NLS,会有一个Date Format字段。 如果将其从 DD-MON-RR 更改为 YYYY-MM-DD HH24:MI:SS ,您将获得默认显示的日期和时间。