C# 在.NETC中创建各自位置的自定义日期时间格式#

C# 在.NETC中创建各自位置的自定义日期时间格式#,c#,.net,datetime,regional-settings,custom-formatting,C#,.net,Datetime,Regional Settings,Custom Formatting,所以这似乎是一件容易的事情,但仍然让我感到困惑。我想根据几个文件的创建日期向用户显示字符串列表。基本上,显示一个日期时间列表。挑战在于,我们希望使用自定义格式(如5/6/13 12:01 PM),但我希望其中的日期部分根据您的系统显示日期的方式进行不同的显示(即,英国人将该日期显示为6/5/13) 我想我可以只构建两个字符串(一个用于日期,一个用于时间),并确保它们的日期是区域格式的,但5/6/13(仅5/6/2013)没有默认选项: 接下来,我希望DateTime.ToSortDateStr

所以这似乎是一件容易的事情,但仍然让我感到困惑。我想根据几个文件的创建日期向用户显示字符串列表。基本上,显示一个日期时间列表。挑战在于,我们希望使用自定义格式(如5/6/13 12:01 PM),但我希望其中的日期部分根据您的系统显示日期的方式进行不同的显示(即,英国人将该日期显示为6/5/13)

我想我可以只构建两个字符串(一个用于日期,一个用于时间),并确保它们的日期是区域格式的,但5/6/13(仅5/6/2013)没有默认选项:

接下来,我希望DateTime.ToSortDateString()函数可以工作,但它也显示为2013年5月6日

我知道我可以使用这样一种完全自定义的格式:DateTime.ToString(“M/d/yy h:mm tt”),但我不想用日期前一个月来固定日期


我想如果我能弄明白什么的话,我可以为美国和欧洲建立一个定制的日期时间,然后查询操作系统显示的日期时间。但这似乎太过分了。有什么想法吗?

System.Globalization.CultureInfo
实现了
IFormatProvider
,因此您可以提供
CultureInfo
对象作为
ToString
方法的参数


MSDN似乎完全符合您的要求。

System.Globalization.CultureInfo
实现了
IFormatProvider
,因此您可以提供
CultureInfo
对象作为
ToString
方法的参数


MSDN似乎完全符合您的要求。

您可以从当前区域性中检索当前的ShortDate格式,将其更改并与
ToString()一起使用。


您可以从当前区域性中检索当前的短日期格式,对其进行更改,并将其与
ToString()一起使用。



除非我弄错了,否则我看不到定制的方法。这只会打印出一个通用的日期,不管你给它什么文化。与中一样,区域性将日期方面显示为“D/M/yyy”。我仍然需要给它一个自定义格式来获得“D/M/YY”更新:是的,我测试了它,如果给ToString()一个自定义字符串格式,那么该自定义字符串格式将覆盖CultureInfo。对不起,你完全正确。作为一个临时解决方案(尽管它看起来有点黑),采用
ShortDatePattern
()并用yy替换yyy如何?很有趣。这当然是一个解决办法。我同意,这有点老套,但这让它更有趣:)嗯,ShortDatePattern是只读的,我看不出有什么办法可以将其设置为其他形式。DateTimeFormat中有一个SetAllDateTimePatterns()函数,但我不确定这是否可以实现。除非我弄错了,否则我看不到定制的方法。这只会打印出一个通用的日期,不管你给它什么文化。与中一样,区域性将日期方面显示为“D/M/yyy”。我仍然需要给它一个自定义格式来获得“D/M/YY”更新:是的,我测试了它,如果给ToString()一个自定义字符串格式,那么该自定义字符串格式将覆盖CultureInfo。对不起,你完全正确。作为一个临时解决方案(尽管它看起来有点黑),采用
ShortDatePattern
()并用yy替换yyy如何?很有趣。这当然是一个解决办法。我同意,这有点老套,但这让它更有趣:)嗯,ShortDatePattern是只读的,我看不出有什么办法可以将其设置为其他形式。DateTimeFormat中有一个SetAllDateTimePatterns()函数,但我不确定这是否可以实现。很明显,您可以解析短日期格式,并根据d-m-y的顺序创建自己的格式。。。但是,仅仅使用现有的格式可能更好、更简单。。。2007年5月6日很痛苦,如果你碰巧习惯了其他的订单,我看不到任何增加价值的年份。2007年5月6日是一个完全有效的日期。。。但是27个中的哪一个很难知道:)不确定你在这里得到了什么。我想你刚才重申了我的问题。我想通过将日期格式裁剪成我用户的DateTimeFormat来让它变得更好、更简单。显然,你可以解析短日期格式,并根据d-m-y的顺序创建自己的格式。。。但是,仅仅使用现有的格式可能更好、更简单。。。2007年5月6日很痛苦,如果你碰巧习惯了其他的订单,我看不到任何增加价值的年份。2007年5月6日是一个完全有效的日期。。。但是27个中的哪一个很难知道:)不确定你在这里得到了什么。我想你刚才重申了我的问题。我想通过根据用户的DateTimeFormat定制日期格式,使其变得更好、更简单。如果您使用修改后的ShortDatePattern创建了一个新的CultureInfo,这将起作用。因此,您不需要将字符串传递给ToString(),而是要传递一个CultureInfo,并修改其ShortDatePatter。@user912447这也是实现它的一种方法。嗯,我不知道为什么一开始我认为这不起作用。我只是按照我建议的方式做了,这比必须的要混乱得多。如果你用修改后的ShortDatePattern创建了一个新的CultureInfo,这会起作用。因此,您不需要将字符串传递给ToString(),而是要传递一个CultureInfo,并修改其ShortDatePatter。@user912447这也是实现它的一种方法。嗯,我不知道为什么一开始我认为这不起作用。我只是按照我建议的方式做了,这比必须的要混乱得多。
var currentDate = DateTime.Now;
var shortDateFormat = CultureInfo.CurrentCulture.DateTimeFormat.ShortDatePattern;
var newShortDateFormat = shortDateFormat.Replace("yyyy", "yy");
Console.WriteLine(currentDate.ToString(shortDateFormat));
Console.WriteLine(currentDate.ToString(newShortDateFormat));