3

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

2013 年 9 月 27 日星期五

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

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

做上面我得到错误:

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

4

6 回答 6

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 的答案,这看起来不错。

于 2013-08-29T11:47:05.217 回答
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");
}
于 2013-08-29T11:54:08.247 回答
1

你的答案是你得到的例外。显然,这里不需要“th”。只需将其删除即可。

这对我来说非常好

String tmpDate = "Friday, 27 September 2013";
closingDate = Convert.ToDateTime(tmpDate).ToString("yyyy-MM-dd");
于 2013-08-29T11:44:01.500 回答
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
}
于 2013-08-29T11:51:36.730 回答
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.");
}
于 2013-08-29T12:25:51.537 回答
-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);
  }                              
}
}
于 2013-08-29T11:41:51.260 回答