代码之家  ›  专栏  ›  技术社区  ›  char m

是什么决定了C程序中的.NET日期格式?

  •  1
  • char m  · 技术社区  · 14 年前

    我做了一个简单的web服务,它在部署的系统很少的情况下工作得很好。现在来自Oracle的数据在其他系统上引起了问题。

    一些信息:

    我们自己访问oracle的方法以字符串形式返回日期,格式为15.09.2010 13:15:00 (注:年份为4位数字)

    System working:
    -DateTime.ToSring() produces 16.09.10 14:15:49 (used in log-file, note year in 2 digits)
    -TryParse(string s, out DateTime result); returns true with string 15.09.2010 13:15:00
    -System.Globalization.CultureInfo.CurrentUICulture.Name has value "en-US"
    
    System NOT working:
    -DateTime.ToSring() produces 9/16/2010 1:25:51 PM  (used in log file)
    -TryParse(string s, out DateTime result); returns false with string 15.09.2010 13:15:00
    -System.Globalization.CultureInfo.CurrentUICulture.Name has value "en-US"
    

    所以我的问题是:

    1. 这两个系统有什么不同?
    2. 使这段代码通用的最佳方法是什么(我知道我可以使用格式化程序日期时间.TryParse以及日期时间.ToString() )
    4 回复  |  直到 14 年前
        1
  •  3
  •   LukeH    14 年前

    很可能这两台机器上的日期和时间格式配置不同(在 ).

    如果您想使这段代码通用,那么您应该在使用时指定一个显式格式 ToString , TryParse 以及任何其他转换 DateTime use UTC . 你最保险的赌注可能是 ISO-8601 formats yyyy-MM-ddTHH:mm:ssZ .

        2
  •  1
  •   Jon Skeet    14 年前

    我们自己的访问oracle的方法以字符串的形式返回日期

    我觉得这是你的主要问题。为什么要首先将值转换为字符串?使用参数化查询等,您根本不需要处理字符串值。回来吧 DateTime DateTimeOffset .

    你呢 能够 请确保始终使用非常特定的格式字符串和区域性来解析/格式化。。。但最好首先避免执行转换。

        3
  •  0
  •   Gilad    14 年前

    日期时间.滴答声将为您提供一个长值,您可以将其另存为Int64或打印到文本文件。如果您还想查看文本文件并了解打印这两个文件的时间。

        4
  •  0
  •   TomTom    14 年前

    • 对于格式化,它由线程的当前区域设置决定。点。

    • 我认为,对于web来说,它是由传递所需语言的浏览器决定的。也就是说,这是不确定的-也可能取决于在web.config文件.

    不管怎样,如果你想要特定的格式,那就要求它。CultureInfo.InvariantCulture等可以被交给所有的格式化函数,并且-最后的手段-线程的当前区域性也可以被改变。