如何获取系统日期时间格式?

37

我正在寻找获取系统日期时间格式的解决方案。

例如:如果我获取 DateTime.Now?这使用的是哪种日期时间格式?DD/MM/YYYY 等等


你想以特定格式获取日期时间吗?那么我们需要知道你想要的格式,以便帮助你。 - Øyvind Bråthen
3
只是为了明确,DateTime.Now没有任何格式。它是一个纯二进制数。 - pm100
5个回答

62

如果它在其他地方没有被修改过,那么这将会得到它:

string sysFormat = CultureInfo.CurrentCulture.DateTimeFormat.ShortDatePattern;

如果使用WinForms应用程序,您还可以查看UICulture

string sysUIFormat = CultureInfo.CurrentUICulture.DateTimeFormat.ShortDatePattern;

请注意,DateTimeFormat是一个可读可写的属性,因此它可以被更改。


3
调用CultureInfo.CurrentCulture.DateTimeFormat;不会返回字符串值。如果你想要系统短日期格式,最终调用应该是string sysDateFormat = CultureInfo.CurrentCulture.DateTimeFormat.ShortDatePattern; - Joe Almore
@JoeAlmore - 感谢您的评论。回答已更新。 - Oded
如果在访问您建议的方法之前进行更改,例如“Thread.CurrentThread.CurrentUICulture=someculture”,如何获取系统日期或货币格式? - Erhan Urun
这是当前线程格式或应用程序格式,而不是系统格式。 - Erhan Urun

19

以上答案并不完全正确。

我曾经遇到这样的情况:我的主线程和UI线程被设计为强制使用“en-US”文化(culture)。 我的Windows日期时间格式是“dd/MM/yyyy”。

string sysFormat = CultureInfo.CurrentCulture.DateTimeFormat.ShortDatePattern;
string sysUIFormat = CultureInfo.CurrentUICulture.DateTimeFormat.ShortDatePattern;

返回了"MM/dd/yyyy"格式,但我想获取真正的Windows格式。 我能够做到的唯一方法是创建一个虚拟线程。

System.Threading.Thread threadForCulture = new System.Threading.Thread(delegate(){} );
string format = threadForCulture.CurrentCulture.DateTimeFormat.ShortDatePattern;

我该如何将这个代码转换为VB.Net:System.Threading.Thread threadForCulture = new System.Threading.Thread(delegate(){} ); - Marwan مروان

4

System.DateTime.Now属性返回一个System.DateTime对象。它以二进制格式存储在内存中,大多数情况下,大多数程序员无需考虑此格式。当您显示DateTime值或将其转换为字符串以进行任何其他原因时,它将根据格式字符串进行转换,该字符串可以指定任何您喜欢的格式。

就这个意义而言,回答您的问题“如果我获取DateTime.Now,那么使用哪种日期时间格式?”是“它根本不使用任何DateTime格式,因为您还没有格式化它”。

通过调用ToString的重载来指定格式,或者(可选)如果您使用System.String.Format。也有一个默认格式,因此您不必总是指定格式。如果您想知道如何确定默认格式,则应查看Oded的答案。


0
如果您想在格式化字符串中同时包含日期和时间,可以简单地使用 DateTime.ToString()DateTimeOffset.ToString()。这将按照当前区域设置格式化 DateTime。它基本上结合了当前区域设置的 DateTimeFormat 中的 ShortDate 和 LongTime。
请查看 文档
示例:
如果您的系统使用dd-MM-yyyy格式表示短日期,HH:mm:ss格式表示长时间,那么以下代码将打印24-02-2023 18:15:22
var dateTimeObject = DateTime.UtcNow;
var formattedString = dateTimeObject.ToString();
Console.WriteLine("Date and Time: " + formattedString);

注意: 如果你在使用DateTimeOffset,它也会将偏移量添加到格式化的字符串中。 例如:24-02-2023 18:23:22 +05:30

-1
请使用以下代码:

System.Globalization.CultureInfo.CurrentCulture.DateTimeFormat.ShortDatePattern


...这是在现在已经有11年历史的被接受答案中。 - Hans Kesting

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接