我可以将下面的字符串转换为DateTime
2013 年 9 月 27 日星期五
这就是我想要实现的目标:
String tmpDate="Friday, 27th September 2013";
closingDate = Convert.ToDateTime(tmpDate).ToString("yyyy-MM-dd");
做上面我得到错误:
该字符串未被识别为有效的日期时间。从索引 10 开始有一个未知单词。
您可以在这样的数组中维护要删除的序数(这可能更容易从其他语言添加/删除序数)。这样您就不必从每个字符串输入中手动删除序数。如果无法从字符串中解析,使用TryParseExact
可以避免引发异常。DateTime
String tmpDate = "Friday, 27th September 2013";
string[] split = tmpDate.Split();
string[] ordinals = new string[] { "th", "nd", "st" };
foreach (string ord in ordinals)
split[1] = split[1].Replace(ord, "");
tmpDate = String.Join(" ", split);
DateTime dt;
if(DateTime.TryParseExact(tmpDate, "dddd, dd MMMM yyyy", CultureInfo.InvariantCulture, DateTimeStyles.None, out dt))
{
Console.WriteLine("Parsed");
}
else
{
Console.WriteLine("Could not parse");
}
你的答案是你得到的例外。显然,这里不需要“th”。只需将其删除即可。
这对我来说非常好
String tmpDate = "Friday, 27 September 2013";
closingDate = Convert.ToDateTime(tmpDate).ToString("yyyy-MM-dd");
您将不得不手动删除 th、nd、rd 和 st,因为没有任何格式将这些考虑在内。之后,您可以像下面一样使用尝试解析
String tmpDate = "Friday, 27th September 2013";
tmpDate = tmpDate.Replace("nd", "")
.Replace("th", "")
.Replace("rd", "")
.Replace("st", "");
string[] formats = { "dddd, dd MMMM yyyy" };
DateTime dt;
if (DateTime.TryParseExact(tmpDate, formats, CultureInfo.InvariantCulture, DateTimeStyles.NoCurrentDateDefault, out dt))
{
//parsing is successful
}
假设您提供的日期字符串的格式没有改变,-st、-nd 和 -th 可以很容易地删除(如前所述)。
还要确保提供有效的(现有)日期,否则将引发 System.FormatException。
string tmpDate = "Friday, 27th September 2013";
string[] splitDate = tmpDate.Split(new Char[] {' '});
splitDate[1] = splitDate[1].Substring(0, splitDate[1].Length-2);
string tmpDatewithoutStNdTh = String.Join(" ", splitDate);
try{
string closingDate = Convert.ToDateTime(tmpDatewithoutStNdTh).ToString("yyyy-MM-dd");
Console.WriteLine(closingDate.ToString());
}
catch(System.FormatException)
{
Console.WriteLine("The provided date does not exist.");
}
请参阅 http://msdn.microsoft.com/en-us/library/system.datetime.parse.aspx
public class Example
{
public static void Main()
{
string[] dateStrings = {"2008-05-01T07:34:42-5:00",
"2008-05-01 7:34:42Z",
"Thu, 01 May 2008 07:34:42 GMT"};
foreach (string dateString in dateStrings)
{
DateTime convertedDate = DateTime.Parse(dateString);
Console.WriteLine("Converted {0} to {1} time {2}",
dateString,
convertedDate.Kind.ToString(),
convertedDate);
}
}
}