使用.NET,我有“2008年4月10日星期四下午1:30:00”,我想要“dddd,dd MMMM,yyyy h:m:st”,“6:09:01 PM”并且想要“”hh:mm:ss tt“,”8月29日星期五“,想要”ddd d MMM“,依此类推。看来我应该能够以某种方式使用DateTimeFormatInfo。
我想我可以用GetAllDateTimePatterns返回的每个模式格式化日期,当原始日期字符串和格式化日期字符串匹配时,我就有了格式。然而,我想生成自定义格式,而不是标准格式。
我想要格式字符串。我不想约会。我有DateTime值和日期的格式化字符串值。我在<formatString>
中需要ToString(<formatString>)
。
答案 0 :(得分:3)
首先,你有一个DateTime类型,或者你有一个字符串?如果是后者,请查看DateTime.ParseExact()
或DateTime.TryParseExact()
函数将该字符串转换为DateTime。
一旦你有了DateTime,就很容易了。只需调用DateTime的.ToString()
方法。
这两个部分的关键是不是 DateTimeFormatInfo。相反,您使用format string。您将格式字符串与[Try] ParseExact()函数和ToString()函数一起使用。
请确保您知道您正在处理哪种“文化”。
答案 1 :(得分:1)
如果您要将实际日期字符串转换为C#DateTime格式字符串,这是不可能可靠的。
例如,您将如何处理此字符串:
03/04/05 9:00
该示例的一些问题:
答案 2 :(得分:1)
将格式传递给ToString。使用您指定的格式:
DateTime d = DateTime.Now;
Console.WriteLine(d.ToString("dddd, dd MMMM, yyyy h:m:s t"));
Console.WriteLine(d.ToString("hh:mm:ss tt"));
Console.WriteLine(d.ToString("ddd d MMM"));
更新以反映问题的变化。
给定的日期/时间字符串可能与一个或多个格式字符串匹配,但您可能会更接近您想要对以下行中的内容执行的操作:
class FindDateTimeFormat {
public static void Show() {
foreach (string item in GetMatchingFormats("Thursday, April 10, 2008 1:30:00 PM")) {
Console.WriteLine(item);
}
}
private static string[] GetMatchingFormats(string dateTimeString) {
DateTimeFormatInfo formatInfo = CultureInfo.CurrentCulture.DateTimeFormat;
List matchingFormats = new List();
foreach (string format in formatInfo.GetAllDateTimePatterns()) {
try {
DateTime dateTime = DateTime.ParseExact(dateTimeString, format, null);
if (!matchingFormats.Contains(format)) {
matchingFormats.Add(format);
}
}
catch (FormatException) {
}
}
return matchingFormats.ToArray();
}
}