我可以将下面的字符串转换为DateTime
2013年9月27日星期五
这就是我想要实现的目标:
String tmpDate="Friday, 27th September 2013";
closingDate = Convert.ToDateTime(tmpDate).ToString("yyyy-MM-dd");
上面做的我得到错误:
该字符串未被识别为有效的DateTime。有一个未知数 单词从索引10开始。
答案 0 :(得分:3)
好吧,我不确定-th, -st, -nd
是否有确切的解决方案,但您可以使用它;
string tmpDate = "Friday, 27 September 2013";
DateTime dt = DateTime.ParseExact(tmpDate,
"dddd, dd MMMM yyyy",
CultureInfo.InvariantCulture);
这是DEMO。
我几乎建议您删除字符串中的-th
,-st
和-nd
部分,但这些会违反规则:)
同时检查 Habib's answer ,这看起来不错。
答案 1 :(得分:2)
你可以在这样的数组中保留要删除的序数(这可能会更容易添加/删除其他语言的序数)。这样您就不必手动从每个字符串输入中删除序号。如果无法从字符串中解析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");
}
答案 2 :(得分:1)
您的回答是您获得的例外情况。显然," th"这里不需要。只需删除它就可以了。
这对我来说非常好
String tmpDate = "Friday, 27 September 2013";
closingDate = Convert.ToDateTime(tmpDate).ToString("yyyy-MM-dd");
答案 3 :(得分:0)
你必须手动删除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
}
答案 4 :(得分:0)
假设您提供的日期字符串的格式不会更改,则可以轻松删除-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.");
}
答案 5 :(得分:-2)
请参阅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);
}
}
}