我需要一个月份为一位数的日期字符串,一天为一位数,一年为两位数(美国为M/d/yy
,大多数其他地方为d/M/yy
。我还需要它跨区域设置工作,因此它应该自动处理月/日和分隔符的顺序。与此最接近的是d
格式,当通过MM/dd/yyyy
调用时会返回date.ToString("d")
。
这需要跨区域工作,所以我尝试了这就是我提出的:
string format = culture.DateTimeFormat.ShortDatePattern
.Replace("yyyy", "yy")
.Replace("dd", "d")
.Replace("MM", "M");
return date.ToString(format);
使用culture.DateTimeFormat.ShortDatePattern
为我提供了用于d
日期格式的日期格式。使用此属性将处理日/月/年和日期分隔符的排序。
有更好的方法吗?
答案 0 :(得分:1)
如果您确实希望完全格式M/d/yy
,那么只需使用:
return date.ToString("M/d/yy", culture);
但是,对于文化来说,这不一定是适当的字符串。例如,对于英国的任何人来说,这将是相当陌生的,它可能会在前一天预期有更多的d/M/yy
格式。
请注意MM/dd/yyyy
格式可能是您使用date.ToString("d")
时获得的格式,但这绝对不是您在英国获得的格式。
基本上,您需要决定是否要确定格式,在这种情况下,您要进行本地化 - 或者您是否要使用“普通”文化特定的短日期字符串格式,在这种情况下{{ 1}}会有意义。
听起来你可能试图走到一半 - “短日期格式,但绝对不使用4位数年份”等等。而可以工作(确保你通过同样date.ToString("d", culture)
方法中的culture
也无法保证文化的短日期模式将使用ToString
等开始。它可能会出现严重错误,例如,如果正常的短日期格式为dd
,您最终会得到ddd dd MMM yyyy
,那么就像2012年6月9日的“09 9 06 12”一样。
基本上,除非你实际从文化到“甚至更短的日期格式”的映射,否则我不建议像这样捏造它。
编辑:这是一个简短的程序,你应该检查它的输出。基本上它会打印原始格式和修改后的格式。
dd d MM yy
在我的机器上,快速扫描列表,我认为你真的没事。似乎没有以原始格式使用using System;
using System.Globalization;
class Program
{
public static void Main()
{
foreach (var culture in
CultureInfo.GetCultures(CultureTypes.SpecificCultures))
{
string original = culture.DateTimeFormat.ShortDatePattern;
string modified = original.Replace("yyyy", "yy")
.Replace("dd", "d")
.Replace("MM", "M");
Console.WriteLine("{0,11}: {1,12} => {2,-9}",
culture, original, modified);
}
}
}
或ddd
。但不能保证会继续如此......