我制作了一个简单的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"
所以我的问题是:
答案 0 :(得分:3)
可能两台计算机上的日期和时间格式配置不同(在控制面板 - >区域和语言选项 - >格式)。
如果您想要使此代码具有通用性,那么在使用ToString
,TryParse
以及将DateTime
转换为/来自文本的任何其他方法时,应指定显式格式;和use UTC。你最安全的赌注可能是ISO-8601 formats之一;例如yyyy-MM-ddTHH:mm:ssZ
。
答案 1 :(得分:1)
我们自己的访问oracle的方法将日期返回为格式为
的字符串
这是我的主要问题。为什么要将值转换为字符串?使用参数化查询等,您根本不需要处理字符串值。只需返回DateTime
或DateTimeOffset
。
您可以确保您始终使用非常特定的格式字符串和文化进行解析/格式化...但最好避免首先执行转换。
答案 2 :(得分:0)
我不能说两者有什么区别。但是,如果你打算将字符串转换为DateTime,那么最好从Ticks中进行。
DateTime.Ticks将为您提供一个长值,您可以将其保存为Int64或打印到文本文件。如果您仍想查看文本文件并了解可以打印两者的时间。
蜱虫是通用的,可以在任何条件下进行整理。
答案 3 :(得分:0)
取决于。
对于格式化,它由线程当前区域设置决定。点。
通常会使用启动应用程序的用户的语言环境进行初始化。
我认为对于网络来说,它是由THE BROWSER决定传输它想要的语言。也就是说,这是不确定的 - 也可能取决于web.config中的设置。
无论如何,如果你想要SPECIFIC格式,那么请问它。 CultureInfo.InvariantCulture等可以交给所有格式化函数,并且 - 不得已 - 线程的当前文化也可以更改。