将字符串转换为DateTime和格式

时间:2013-08-29 11:38:10

标签: c# datetime

我可以将下面的字符串转换为DateTime

2013年9月27日星期五

这就是我想要实现的目标:

String tmpDate="Friday, 27th September 2013";
closingDate = Convert.ToDateTime(tmpDate).ToString("yyyy-MM-dd");

上面做的我得到错误:

  

该字符串未被识别为有效的DateTime。有一个未知数   单词从索引10开始。

6 个答案:

答案 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);
  }                              
}
}