2012-12-26 66 views
-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; 

需要更好的解决方案。

+0

你尝试过什么吗? – ryadavilli

+0

[你有什么试过](http://mattgemmell.com/2008/12/08/what-have-you-tried/)? – Azodious

+2

我已编辑过,以显示我现在正在做的事情。不要急于投票。 –

回答

2

你在这里。我相信它是关于产生输出而不是读取它。

DateTime dt = new DateTime(2013, 1, 1); 
Console.WriteLine(string.Format("{0:MMM} {0,2:%d} {0:yyyy}", dt)); 
+0

不会工作,因为它会在MMM和dd之间添加2个空格 – JleruOHeP

+0

@JleruOHeP你是对的。将工作更新 – ryadavilli

+1

这不会工作 - 它不会增加额外的空间,如果需要的话......并且%d后有额外的逗号 – JleruOHeP

2

解析的问题是字符串中可变数量的空格。您可以将" "(空格)上的字符串与RemoveEmptyEntries分开,然后使用string.Join创建一个具有单个空格的新字符串。稍后,可以使用格式​​3210与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 
3

如果您需要从日期时间(如你的例子)得到的字符串,那么你可以使用简单:

if (DateTime.Now.Day > 9) 
    myFormat = DateTime.Now.ToString("MMM dd YYYY"); 
else 
    myFormat = DateTime.Now.ToString("MMM d YYYY"); 
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); 
} 
相关问题