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