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

时间:2012-05-14 17:57:06

标签: c# .net oracle plsql oracle-sqldeveloper

我是Oracle新手,希望有人能为我澄清这个场景。

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

在SQL Developer中,这些日期以DD-MON-YY格式显示(例如:'12 -MAY-12')。 SQL Developer中的字段数据类型显示它是Date类型,并且选中Simple单选按钮。当我在SQL Developer中运行此查询时,我得到一个如下所示的日期:

11-MAY-12

我在作为C#Web服务一部分的程序集中使用此查询。托管我们QE服务器的离岸团队中的某个人注意到该字段的值正在转换为IST偏移量(使用GetXml为DataSet转换为XML)。问题是,我甚至不知道偏移量是否存在,直到我在调试器中检查输出,因为我在SQL Developer中看不到它。它就这样过来了:

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

没有使用内在日期转换功能,只是提取日期的字段名称。

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

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

1 个答案:

答案 0 :(得分:1)

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,您将获得默认显示的日期和时间。