转换为DateTime

时间:2016-07-18 08:42:24

标签: c# datetime

我想将字符串转换为DateTime对象。我的字符串将采用这种格式 - “2016年7月18日”(日期可以更改)。显然,.Net不会将此作为有效的日期格式。有没有简单的方法来转换它而不使用任何第三方库?

4 个答案:

答案 0 :(得分:0)

解决方法:

string dateStr = "18th Jul 2016";
dateStr = dateStr.Replace("th", "").Replace("st", "").Replace("rd", "").Replace("nd", "");

DateTime date;
if (DateTime.TryParseExact(dateStr, "dd MMM yyyy", CultureInfo.CurrentCulture, 
                                                  DateTimeStyles.AssumeLocal, out date))
{

}
else
{
    // error
}

答案 1 :(得分:0)

我不会使用String.Replace因为它可能是一个问题,因为当前文化的月份名称包含您要替换的字符串。

相反,您可以从字符串中删除此部分:

string input = "18th Jul 2016";
string[] token = input.Split();  // split by space, result is a string[] with three tokens
token[0] = new string(token[0].TakeWhile(char.IsDigit).ToArray());
input = String.Join(" ", token);
DateTime dt;
if(DateTime.TryParseExact(input, "dd MMM yyyy", null, DateTimeStyles.None, out dt))
{
    Console.WriteLine("Date is: " + dt.ToLongDateString());
}

如果您将null作为IFormatProvider传递给TryParseExact,则会使用当前文化的datetimeformat。如果您想强制使用英文名称,可以通过CultureInfo.InvariantCulture

答案 2 :(得分:0)

它有点软糖但是

string result = System.Text.RegularExpressions.Regex.Replace(dt, "[st|th|nd|rd]{2} ", " ", System.Text.RegularExpressions.RegexOptions.IgnoreCase);
DateTime d = DateTime.Parse(result);

我包含了空间,所以它没有尝试编辑月份..我确实从[0-9] {1,2}开始并用数字替换它,但这似乎有点过分

答案 3 :(得分:0)

string dateString = "18th Jul 2016";
dateString = Regex.Replace(dateString, @"^(\d{2})(st|nd|rd|th)", "$1");
var result = DateTime.ParseExact(dateString, "dd MMM yyyy", CultureInfo.InvariantCulture);