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

发布于 2024-09-24 01:32:33 字数 819 浏览 1 评论 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() 的格式化程序)

I made a simple web service which worked nice with few systems that it was deployed. Now the date from Oracle causes trouble on other system.

Some info:

Our own methods that accesses oracle returns dates as string in format 15.09.2010 13:15:00
(note year in 4 digits)

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"

So my questions are:

  1. What is different with these 2 systems?
  2. What is the best way to make this code universal (i know i can use formatter for DateTime.TryParse and DateTime.ToString() )

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

心碎的声音 2024-10-01 01:32:33

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

如果您想让此代码通用,那么您应该在使用 ToStringTryParse 以及任何其他将 DateTime 转换为/来自文本;并使用 UTC。您最安全的选择可能是 ISO-8601 格式之一;例如yyyy-MM-ddTHH:mm:ssZ

Chances are that the date and time formats on the two machines are configured differently (in Control Panel -> Regional and Language Options -> Formats).

If you want to make this code universal then you should specify an explicit format when using ToString, TryParse and any other methods that convert a DateTime to/from text; and use UTC. Your safest bet would probably be one of the ISO-8601 formats; for example yyyy-MM-ddTHH:mm:ssZ.

樱花落人离去 2024-10-01 01:32:33

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

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

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

Our own methods that accesses oracle returns dates as string in format

That strikes me as your main problem. Why are you converting values into strings to start with? Use parameterized queries etc, and you shouldn't need to deal with string values at all. Just return DateTime or DateTimeOffset.

You could make sure that you always parse/format with a very specific format string and culture... but it's best to avoid performing the conversion in the first place.

圈圈圆圆圈圈 2024-10-01 01:32:33

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

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

蜱虫是通用的,可以在任何条件和排序下工作。

I can't say what is the difference between the two. But, If you are planning to convert a string to DateTime better do it from Ticks.

DateTime.Ticks will provide you with a long value that you can save as Int64 or print to a text file. If you still want to look at the text file and understand the time you can print both.

Ticks are universal and will work under any condition and collation.

惯饮孤独 2024-10-01 01:32:33

这取决于。

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

  • 这通常会使用启动应用程序的用户的区域设置进行预初始化。

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

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

It depends.

  • For formatting , it is determined by the thread current locale. Point.

  • This gets normally pre-initializd with the locale of the user starting the application.

  • I think for web, it is determined by THE BROWSER transmitting the languages it wants. That said, this is unsure - could also depend on a setting in web.config.

Anyhow, if you want SPECIFIC formatting, then ASK FOR IT. CultureInfo.InvariantCulture etc. can be handed into all formatting functions, and - last resort - the thread's current culture can also be changed.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文