如何将DateTime字符串转换为格式字符串

时间:2009-10-01 17:45:24

标签: .net datetime date

使用.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>)

3 个答案:

答案 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

该示例的一些问题:

  1. 你不知道是月份,也就是年份等。
  2. 您不知道格式字符串是使用12小时制还是24小时制。
  3. 您不确定是否要准确显示分钟数,或者始终用00s代替。

答案 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();
    }
}