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

时间:2010-09-16 13:21:06

标签: c# datetime .net-2.0

我制作了一个简单的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. 使这段代码具有通用性的最佳方法是什么(我知道我可以在DateTime.TryParse和DateTime.ToString()中使用格式化程序)

4 个答案:

答案 0 :(得分:3)

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

如果您想要使此代码具有通用性,那么在使用ToStringTryParse以及将DateTime转换为/来自文本的任何其他方法时,应指定显式格式;和use UTC。你最安全的赌注可能是ISO-8601 formats之一;例如yyyy-MM-ddTHH:mm:ssZ

答案 1 :(得分:1)

  

我们自己的访问oracle的方法将日期返回为格式为

的字符串

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

可以确保您始终使用非常特定的格式字符串和文化进行解析/格式化...但最好避免首先执行转换。

答案 2 :(得分:0)

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

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

蜱虫是通用的,可以在任何条件下进行整理。

答案 3 :(得分:0)

取决于。

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

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

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

无论如何,如果你想要SPECIFIC格式,那么请问它。 CultureInfo.InvariantCulture等可以交给所有格式化函数,并且 - 不得已 - 线程的当前文化也可以更改。