-2

我需要将日期时间解析为以下字符串:

Nov 30 2012
Dec  1 2012

请注意日期格式。对于第二个示例,那里只有一个字符,并且在开始时用空格填充。

现在我正在这样做:

    string month = DateTime.Now.ToString("MMM");
    string day = DateTime.Now.Day.ToString().PadLeft(2, ' ');
    string year = DateTime.Now.Year.ToString();

    string myFormat = month + " " + day + " " + year;

需要更优雅的解决方案。

4

4 回答 4

3

如果您需要从 DateTime 获取字符串(如您的示例中所示),那么您可以使用简单的:

if (DateTime.Now.Day > 9)
    myFormat = DateTime.Now.ToString("MMM dd YYYY");
else
    myFormat = DateTime.Now.ToString("MMM  d YYYY");
于 2012-12-26T08:01:37.590 回答
2

您的解析问题是字符串中的可变数量的空格。您可以在" "(space) with上拆分字符串RemoveEmptyEntries,然后使用string.Join它创建一个带有单个空格的新字符串。稍后您可以使用该"MMM d yyyy"格式DateTime.ParseExact

string str = "Dec  1 2012";
string newStr = string.Join(" ", str.Split(" ".ToCharArray(),StringSplitOptions.RemoveEmptyEntries));
DateTime dt = DateTime.ParseExact(newStr, "MMM d yyyy", CultureInfo.InvariantCulture);

编辑:

由于现在已编辑问题,并且它需要日期的字符串格式。以下可用于格式化。

string formattedDate = dt.Day < 10 ? dt.ToString("MMM  d yyyy"): //multiple spaces
                                     dt.ToString("MMM d yyyy"); //single space
于 2012-12-26T07:56:34.283 回答
2

干得好。我相信这是关于生成输出而不是阅读它。

 DateTime dt = new DateTime(2013, 1, 1);
 Console.WriteLine(string.Format("{0:MMM} {0,2:%d} {0:yyyy}", dt));
于 2012-12-26T08:01:32.937 回答
1

使用字符串格式

DateTime dt = new DateTime(2012, 12, 1);
MessageBox.Show(String.Format("{0:MMM d yyyy}", dt));

编辑:示例

如果您希望数字对齐,那么类似

//call
MessageBox.Show(GetNewDateString(new DateTime(2012, 11, 30)) + "\n" + GetNewDateString(new DateTime(2012, 12, 1)));

public String GetNewDateString(DateTime dt)
{
   return dt.Day > 9 ? String.Format("{0:MMM d yyyy}", dt) : String.Format("{0:MMM   d yyyy}", dt);
}
于 2012-12-26T08:06:24.363 回答