gpt4 book ai didi

c# - ODP.NET:Oracle 日期格式化为 "output-only"格式

转载 作者:太空宇宙 更新时间:2023-11-03 13:23:14 24 4
gpt4 key购买 nike

我想在 C# 中使用 Oracle 日期格式,例如在 to_char(date, format) 中,没有数据库连接,也没有编写我自己的格式解释器。

示例应用程序(我正在使用 Oracle Data Provider for .NET):

namespace OracleDateToCharTest
{
using System;
using Oracle.DataAccess.Client;
using Oracle.DataAccess.Types;

class Program
{

/// <param name="fmt"> Oracle-like format string. </param>
public static string OracleDateToChar(DateTime date, string fmt)
{
//// preparing format for ToString()
OracleGlobalization og = OracleGlobalization.GetThreadInfo();
string prevFormat = og.DateFormat;
og.DateFormat = fmt;

try
{
//// converting to OracleDate
OracleDate odacDate = new OracleDate(date);
//// setting format for ToString()
OracleGlobalization.SetThreadInfo(og);
return odacDate.ToString();
}
catch (OracleTypeException ex)
{
if (ex.Number == 1820)
{
//// described issue
}
throw;
}
finally
{
og.DateFormat = prevFormat;
OracleGlobalization.SetThreadInfo(og);
}
}

static void Main(string[] args)
{
var x = OracleDateToChar(DateTime.Now, "mm-dd-yyyy");
var y = OracleDateToChar(DateTime.Now, "mm-dd-yyyy HH24:Mi:ss");
var z = OracleDateToChar(DateTime.Now, "IW"); //// exception
}
}
}

它适用于 "mm-dd-yyyy""mm-dd-yyyy HH24:Mi:ss" 等格式,但不幸的是它不适用使用“仅输出”格式,例如 “IW”(仅输出格式 是您可以根据 http://docs.oracle.com/cd/B28359_01/olap.111/b28126/dml_commands_1029.htm 上的表 9-4 在 TO*_DATETIME 函数中指定的格式).

当我打电话时

OracleDateToChar(DateTime.Now, "IW")

我在 ToString() 行中收到 ORA-01820 格式代码无法以日期输入格式出现 异常。

如果我在 ToDate() 方法中遇到此错误,我会理解,但在 ToString() 中,它似乎是 ODP.NET 中的错误。

问题:有没有一种方法可以实现可以处理仅输出格式的 OracleDateToChar 方法? (假设从 nvl 调用 select to_char(:date, :fmt); 从 oracle 数据库不是一个选项)

最佳答案

关于该 Oracle 文档的要点是它适用于 DATE_FORMAT,它是 Oracle 语言的一部分。因此,您只能作为 PL/SQL 语句执行它,这就是为什么您不能让它在客户端工作:IW 不是 ODP.Net 全局化的有效格式掩码据我所知。事实上,ODP 全局化 DateFormat 默认为您在本地 NLS_DATE_FORMAT 中拥有的任何内容,这是一个完整的日期格式字符串,而 IW 用于获取一年中的星期而不是用于格式化约会本身。据我所知,.Net 框架中的任何内容都无法识别特定于 Oracle 的字符串,因此为了使其正常工作,您需要向 Oracle 发出命令并取回结果,如该页面上的示例所示:

CONSIDER mydatetime
DATE_FORMAT MON-RRRR-DD-HH24

更改日期格式似乎有些矫枉过正。有一些很好的替代建议,它们是客户端 .Net in this SO answer

进一步阅读

Oracle 日期结构 (OracleDate) 的 Oracle 文档 ToString() method注意到

The returned value is a string representation of the OracleDate in the format specified by the thread's OracleGlobalization.DateFormat property

(我的重点)。这个的定义可以是 found here . NLS_DATE_FORMAT 的允许格式字符串的有用列表,因此通过扩展 OracleDate.ToString,可以是 found here .

关于c# - ODP.NET:Oracle 日期格式化为 "output-only"格式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23398669/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com