Informix:.NET 驱动程序:默认日期时间格式

Posted

技术标签:

【中文标题】Informix:.NET 驱动程序:默认日期时间格式【英文标题】:Informix: .NET driver: default datetime format 【发布时间】:2020-10-19 19:19:25 【问题描述】:

我在我的 winforms 应用程序中使用 Informix .NET 驱动程序,并正在使用存储过程结果集填充数据网格。奇怪的是,日期时间年到秒(由存储的过程设置并返回的格式)列显示为日期时间年到分钟与 AM/PM。 .net 驱动程序是否更改/应用格式到结果集的日期时间列?

【问题讨论】:

Informix 不会生成任何具有 AM/PM 的格式,除非它被明确要求这样做。所以环境中的某些东西正在使它发生。无论是环境变量还是连接字符串中的值,还是在 Informix 驱动程序的客户端完成的某事,都将更难追踪。区域设置也可能相关 日期格式的 Informix 优先级 ibm.com/support/knowledgecenter/en/SSGU8G_14.1.0/… ,在我的情况下,我将 CLIENT_LOCALE 设置为 en_US.819 并且我的端(客户端)没有设置 DBDATE 和 GL_DATE。我是否正确假设 en_US.819 环境变量是影响日期时间格式的原因?我找不到此编码的默认格式。 【参考方案1】:

使用 .NET,日期格式通常由您的本地化设置 (CultureInfo) 控制,而不是由提供者完成。

在下面的代码中,我使用 CultureInfo() 来指定“en-US”和“en-GB”格式:

using System;
using System.IO;
using System.Data;
using System.Text;
using System.Threading;
using IBM.Data.Informix;


class sample 
    static void Main(string[] args) 

     IfxConnection conn;
     try 

        conn = new IfxConnection("Server=ids1410;Database=sysmaster");
        conn.Open();    
        IfxCommand cmmd = conn.CreateCommand();
        cmmd.CommandText = "SELECT current::datetime year to second";
        IfxDataReader drdr;
        drdr = cmmd.ExecuteReader();
        drdr.Read();
        Console.WriteLine("GetIfxDateTime:\t\t"+drdr.GetIfxDateTime(0)); 
        Thread.CurrentThread.CurrentCulture = new System.Globalization.CultureInfo("en-US");
        Console.WriteLine("GetDateTime (en-US):\t"+drdr.GetDateTime(0)); 
        Thread.CurrentThread.CurrentCulture = new System.Globalization.CultureInfo("en-GB");
        Console.WriteLine("GetDateTime (en-GB):\t"+drdr.GetDateTime(0)); 
        
        conn.Close();
     
     catch (Exception e) 
        Console.WriteLine(e.Message);
     
   

这将导致

D:\Infx\cs>csc.exe /R:%INFORMIXDIR%\bin\netf40\IBM.Data.Informix.dll /nologo datetime.cs

D:\Infx\cs>datetime
GetIfxDateTime:         2020-10-20 09:30:32
GetDateTime (en-US):    10/20/2020 9:30:32 AM
GetDateTime (en-GB):    20/10/2020 09:30:32

D:\Infx\cs>

您可能想改用 GetIfxDateTime()。

【讨论】:

谢谢。我会试试你的解决方案。

以上是关于Informix:.NET 驱动程序:默认日期时间格式的主要内容,如果未能解决你的问题,请参考以下文章

64 位 .NET Informix ADO.NET 提供程序的程序集加载错误

Informix - 两个日期之间

优化asp.net应用程序中informix存储过程的性能?

Informix:日期时间操作

Informix 日期时间选择标准(在运算符之间)

在 ASP.net 应用程序的 Informix 查询中使用命名参数