【问题标题】:what determines .NET date formats in C# program?什么决定了 C# 程序中的 .NET 日期格式?
【发布时间】:2010-09-16 13:21:05
【问题描述】:

我制作了一个简单的 Web 服务,它在部署的几个系统中运行良好。现在来自 Oracle 的日期在其他系统上引起了麻烦。

一些信息:

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

系统工作: -DateTime.ToSring() 产生 16.09.10 14:15:49(用于日志文件,以 2 位数字标注年份) -TryParse(string s, out DateTime result);使用字符串 15.09.2010 13:15:00 返回 true -System.Globalization.CultureInfo.CurrentUICulture.Name 的值为“en-US” 系统不工作: -DateTime.ToSring() 产生 9/16/2010 1:25:51 PM(用于日志文件) -TryParse(string s, out DateTime result);使用字符串 15.09.2010 13:15:00 返回 false -System.Globalization.CultureInfo.CurrentUICulture.Name 的值为“en-US”

所以我的问题是:

  1. 这两个系统有什么不同?
  2. 使此代码通用的最佳方法是什么(我知道我可以为 DateTime.TryParse 和 DateTime.ToString() 使用格式化程序)

【问题讨论】:

  • 是否有任何理由不通过 Web 服务将您的日期公开为 DateTime 或 DateTimeOffset 而不是将它们公开为字符串?
  • @alfred。传入日期是 DateTimes。 WSCF for VS2005 自动生成这些类。问题是用于数据库访问的遗留 c 代码将日期作为字符串获取。我已经使用 ADO.NET 一年多了。这是我 2 年前制作的第一个 C# WS。这就是为什么会这样。

标签: c# datetime .net-2.0


【解决方案1】:

可能是两台机器上的日期和时间格式配置不同(在控制面板 -> 区域和语言选项 -> 格式)。

如果你想让这段代码通用,那么你应该在使用ToStringTryParse 和任何其他将DateTime 转换为/从文本的方法时指定一个明确的格式;和use UTC。您最安全的选择可能是ISO-8601 formats 之一;例如yyyy-MM-ddTHH:mm:ssZ

【讨论】:

  • 感谢卢克!区域和语言选择是关键……爱沙尼亚语和芬兰语是相同的,所以它在那里工作很幸运。我必须承认,设计/实现真的很糟糕。
【解决方案2】:

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

这让我觉得你的主要问题。为什么要将值转换为字符串开始?使用参数化查询等,您根本不需要处理字符串值。只需返回DateTimeDateTimeOffset

可以确保始终使用非常特定的格式字符串和区域性进行解析/格式化...但最好一开始就避免执行转换。

【讨论】:

  • 当然这是最好的选择,但与我的问题无关。方法使用从 C# 调用的遗留 c 代码。使用它自然是一个错误,但我不能再更改 db 层了 :( 将来我只使用 ADO.NET
【解决方案3】:

我不能说两者之间有什么区别。但是,如果您打算将字符串转换为 DateTime,最好从 Ticks 中进行。

DateTime.Ticks 将为您提供一个长值,您可以将其保存为 Int64 或打印到文本文件。如果您仍想查看文本文件并了解可以同时打印的时间。

刻度是通用的,可以在任何条件和排序规则下工作。

【讨论】:

    【解决方案4】:

    视情况而定。

    • 对于格式化,它由线程当前语言环境决定。点。

    • 这通常使用启动应用程序的用户的语言环境进行预初始化。

    • 我认为对于网络来说,它是由浏览器传输它想要的语言来决定的。也就是说,这不确定 - 也可能取决于 web.config 中的设置。

    无论如何,如果您想要特定的格式,请询问。 CultureInfo.InvariantCulture 等可以传递给所有格式化函数,并且 - 最后的手段 - 线程的当前文化也可以更改。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-06-19
      • 1970-01-01
      相关资源
      最近更新 更多