我需要将日期时间解析为以下字符串:
Nov 30 2012
Dec 1 2012
请注意日期格式。对于第二个示例,只有一个char,并且在开始时用空格填充。
现在我正在这样做:
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;
需要更优雅的解决方案。
答案 0 :(得分:3)
如果你需要从DateTime获取字符串(如在你的例子中),那么你可以使用simple:
if (DateTime.Now.Day > 9)
myFormat = DateTime.Now.ToString("MMM dd YYYY");
else
myFormat = DateTime.Now.ToString("MMM d YYYY");
答案 1 :(得分:2)
解析的问题是字符串中可变数量的空格。您可以使用" "
在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
答案 2 :(得分:2)
你走了。我相信它是关于生成输出而不是读取它。
DateTime dt = new DateTime(2013, 1, 1);
Console.WriteLine(string.Format("{0:MMM} {0,2:%d} {0:yyyy}", dt));
答案 3 :(得分:1)
使用String.Format
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);
}