Convert to DateTime

本文关键字:DateTime to Convert | 更新日期: 2023-09-27 17:57:29

我想将字符串转换为DateTime对象。我的字符串将是这样的格式-"2016年7月18日"(日期可以更改)。显然,.Net并不将其视为有效的日期格式。有没有什么简单的方法可以在不使用任何第三方库的情况下转换它?

Convert to DateTime

我不会使用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,则使用当前区域性的日期时间格式。如果你想强制使用英文名字,你可以通过CultureInfo.InvariantCulture

解决方法:

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
}

这有点像软糖,但

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}开始,并将其替换为数字,但这似乎高估了

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);