我想将DateTime输出为字符串,在操作系统首选项中指定的格式。我不想提供显式的格式模式,而是要使用用户在区域面板中定义的内容。
例如,在我的Windows 10系统上,格式如下所示:控制面板 > 区域 > 格式:
- 短日期:"yyyy-MM-dd" - 短时间:"HH:mm"
当在Windows资源管理器中显示文件和文件夹时,它们以"yyyy-MM-dd HH:mm"的格式显示。
我应该指出,我正在使用Unity 2019.4.4。据我所知,它没有覆盖CurrentCulture或执行任何奇怪的操作。我已经使用了"unity3d"标签来标记这个问题,但它可能与Unity没有特别相关,除非Unity正在对区域进行奇怪的操作。
我尝试了以下.NET Fiddle,并看到了与Unity中相同的结果。
我假设我需要以某种方式访问在操作系统区域面板中定义的文化信息,并使用它来格式化字符串,但这就是我迷失的地方。
CurrentCulture似乎正在使用"M / d / yyyy"的ShortDate和"h:mm tt"的ShortTime,这不是我在区域面板中设置的内容。
如何按照用户在Windows上存储的区域面板中指定的格式将DateTime输出为字符串,而不事先知道该模式是什么?
最终,我希望字符串的格式与Windows资源管理器使用的格式相同,类似于"ShortDate ShortTime"。
例如,在我的Windows 10系统上,格式如下所示:控制面板 > 区域 > 格式:
- 短日期:"yyyy-MM-dd" - 短时间:"HH:mm"
当在Windows资源管理器中显示文件和文件夹时,它们以"yyyy-MM-dd HH:mm"的格式显示。
我应该指出,我正在使用Unity 2019.4.4。据我所知,它没有覆盖CurrentCulture或执行任何奇怪的操作。我已经使用了"unity3d"标签来标记这个问题,但它可能与Unity没有特别相关,除非Unity正在对区域进行奇怪的操作。
我尝试了以下.NET Fiddle,并看到了与Unity中相同的结果。
using System;
using System.Globalization;
public class Program
{
public static void Main()
{
long dateTimeTicks = 637314588165245627;
DateTime dateTime = new DateTime(dateTimeTicks);
// I thought the following methods might work, since the Region panel allow configuring the
// short and long formats for date and time.
Console.WriteLine(dateTime.ToShortDateString()); // 7/27/2020
Console.WriteLine(dateTime.ToLongDateString()); // Monday, July 27, 2020
Console.WriteLine(dateTime.ToShortTimeString()); // 3:00 PM
Console.WriteLine(dateTime.ToLongTimeString()); // 3:00:16 PM
// None of the standard date and time format strings work. The "o", "s", and "u" are close to
// what I'm looking for, but I don't want to force this format, I want to use whatever the
// user has specified in the Region preferences.
Console.WriteLine(dateTime.ToString()); // 7/27/2020 3:00:16 PM
Console.WriteLine(dateTime.ToString(CultureInfo.CurrentCulture)); // 7/27/2020 3:00:16 PM
Console.WriteLine(dateTime.ToString(CultureInfo.InvariantCulture)); // 07/27/2020 15:00:16
Console.WriteLine(dateTime.ToString(CultureInfo.InstalledUICulture)); // 7/27/2020 3:00:16 PM
Console.WriteLine(dateTime.ToString("d")); // 7/27/2020
Console.WriteLine(dateTime.ToString("D")); // Monday, July 27, 2020
Console.WriteLine(dateTime.ToString("f")); // Monday, July 27, 2020 3:00 PM
Console.WriteLine(dateTime.ToString("F")); // Monday, July 27, 2020 3:00:16 PM
Console.WriteLine(dateTime.ToString("g")); // 7/27/2020 3:00 PM
Console.WriteLine(dateTime.ToString("G")); // 7/27/2020 3:00:16 PM
Console.WriteLine(dateTime.ToString("m")); // July 27
Console.WriteLine(dateTime.ToString("o")); // 2020-07-27T15:00:16.5245627
Console.WriteLine(dateTime.ToString("r")); // Mon, 27 Jul 2020 15:00:16 GMT
Console.WriteLine(dateTime.ToString("s")); // 2020-07-27T15:00:16
Console.WriteLine(dateTime.ToString("t")); // 3:00 PM
Console.WriteLine(dateTime.ToString("T")); // 3:00:16 PM
Console.WriteLine(dateTime.ToString("u")); // 2020-07-27 15:00:16Z
Console.WriteLine(dateTime.ToString("U")); // Monday, July 27, 2020 3:00:16 PM
Console.WriteLine(dateTime.ToString("y")); // July 2020
// I considered using CultureInfo.CurrentCulture.DateTimeFormat.ShortDatePattern and
// CultureInfo.CurrentCulture.DateTimeFormat.ShortTimePattern together, but they also
// don't return what is specified in Region preferences.
// 7/27/2020
Console.WriteLine(dateTime.ToString(CultureInfo.CurrentCulture.DateTimeFormat.ShortDatePattern));
}
}
我假设我需要以某种方式访问在操作系统区域面板中定义的文化信息,并使用它来格式化字符串,但这就是我迷失的地方。
CurrentCulture似乎正在使用"M / d / yyyy"的ShortDate和"h:mm tt"的ShortTime,这不是我在区域面板中设置的内容。
如何按照用户在Windows上存储的区域面板中指定的格式将DateTime输出为字符串,而不事先知道该模式是什么?
最终,我希望字符串的格式与Windows资源管理器使用的格式相同,类似于"ShortDate ShortTime"。
DateTime.Now.ToString(CultureInfo.CurrentCulture)
返回“Tue 28-Jul-20 7:13:20 AM”。调用CultureInfo.CurrentCulture.DateTimeFormat.ShortDatePattern
和CultureInfo.CurrentCulture.DateTimeFormat.ShortTimePattern
也会返回它们的正确值。 - Martheen