Ada*_*gen 17 .net datetime internationalization datetime-format
我正在寻找一种能够在没有工作日的情况下获取长日期时间的语言环境.这样的野兽存在吗?
下面是我用来获取包含工作日的长日期格式的代码:
DateTime time = ...
String formattedDate = time.ToLongDateString();
Run Code Online (Sandbox Code Playgroud)
编辑
我希望看到的例子:
ToLongDateString()返回以下内容:
String formattedDate = DateTime.Now.Date.ToLongDateString().Replace(DateTime.Now.DayOfWeek.ToString()+ ", ", "")
Run Code Online (Sandbox Code Playgroud)
这似乎可以解决问题.
这似乎是我想要的字符串.
见下面的代码:
class DateTest
{
static private string GetDatePatternWithoutWeekday(CultureInfo cultureInfo)
{
string[] patterns = cultureInfo e.DateTimeFormat.GetAllDateTimePatterns();
string longPattern = cultureInfo.DateTimeFormat.LongDatePattern;
string acceptablePattern = String.Empty;
foreach (string pattern in patterns)
{
if (longPattern.Contains(pattern) && !pattern.Contains("ddd") && !pattern.Contains("dddd"))
{
if (pattern.Length > acceptablePattern.Length)
{
acceptablePattern = pattern;
}
}
}
if (String.IsNullOrEmpty(acceptablePattern))
{
return longPattern;
}
return acceptablePattern;
}
static private void Test(string locale)
{
DateTime dateTime = new DateTime(2009, 12, 5);
Thread.CurrentThread.CurrentCulture = new CultureInfo(locale);
string format = GetDatePatternWithoutWeekday(Thread.CurrentThread.CurrentCulture);
string result = dateTime.ToString(format);
MessageBox.Show(result);
}
}
Run Code Online (Sandbox Code Playgroud)
从技术上讲,如果长格式的中间名称夹在中间,它可能不会起作用.为此,我应该选择具有最长公共子串而不是最长完全匹配的模式.
改进已接受的答案,GetAllDateTimePatterns可以采用参数将结果限制为与标准格式字符串相关的模式,例如长日期模式的“D”。
例如,GetAllDateTimePatterns(\'D\')目前正在为 en-US 返回此内容:
"dddd, MMMM d, yyyy", "MMMM d, yyyy", "dddd, d MMMM, yyyy", "d MMMM, yyyy" \nRun Code Online (Sandbox Code Playgroud)\n\n对于 zh-HK 来说:
\n\n"yyyy\'\xe5\xb9\xb4\'M\'\xe6\x9c\x88\'d\'\xe6\x97\xa5\'", "yyyy\'\xe5\xb9\xb4\'MM\'\xe6\x9c\x88\'dd\'\xe6\x97\xa5\'", "yyyy\xe5\xb9\xb4MMMd\xe6\x97\xa5", "yyyy\xe5\xb9\xb4MMMd\xe6\x97\xa5, dddd"\nRun Code Online (Sandbox Code Playgroud)\n\n假设它们按某种偏好或流行顺序列出,我们可以选择第一个不包含星期几的选项。
\n\n以下是扩展方法,因此您可以简单地使用myDateTime.ToLongDateStringWithoutDayOfWeek()和myDateTime.ToLongDateTimeStringWithoutDayOfWeek()。
public static string ToLongDateStringWithoutDayOfWeek(this DateTime d)\n{\n return d.ToString(\n CultureInfo.CurrentCulture.DateTimeFormat.GetAllDateTimePatterns(\'D\')\n .FirstOrDefault(a => !a.Contains("ddd") && !a.Contains("dddd")) \n ?? "D");\n}\n\npublic static string ToLongDateTimeStringWithoutDayOfWeek(this DateTime d, bool includeSeconds = false)\n{\n char format = includeSeconds ? \'F\' : \'f\';\n return d.ToString(\n CultureInfo.CurrentCulture.DateTimeFormat.GetAllDateTimePatterns(format)\n .FirstOrDefault(a => !a.Contains("ddd") && !a.Contains("dddd")) \n ?? format.ToString()); \n}\nRun Code Online (Sandbox Code Playgroud)\n
这是 Reza 的改进答案,它在某些本地化中无法正常工作。
string formattedDate = DateTime.Now.ToLongDateString()
.Replace(DateTimeFormatInfo.CurrentInfo.GetDayName(DateTime.Now.DayOfWeek), "")
.TrimStart(", ".ToCharArray());
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
20343 次 |
| 最近记录: |