将20121004 (yyyyMMdd) 转换为有效的日期时间
本文关键字:有效 日期 时间 转换 20121004 yyyyMMdd | 更新日期: 2023-09-27 18:37:25
我有一个以下格式的字符串yyyyMMdd
我试图让它看起来像这样:
yyyy-MM-dd
当我尝试时:
string date = "20121004";
Convert.ToDateTime(date).ToString("yyyy-MM-dd");
我收到错误:
FormatException: String was not recognized as a valid DateTime.
以下工作还是会遇到问题:
private string GetValidDate(string date,string format)
{
DateTime result;
if(DateTime.TryParseExact(date, "yyyy-MM-dd", CultureInfo.InvariantCulture, DateTimeStyles.None, out result))
{
return date;
}
else if(DateTime.TryParseExact(date, "yyyyMMdd", CultureInfo.InvariantCulture, DateTimeStyles.None, out result))
{
return DateTime.ParseExact(date, "yyyyMMdd",
CultureInfo.InvariantCulture).ToString("yyyy-MM-dd");
}
else
{
return "Invalid Date Format";
}
}
只需使用 DateTime.ParseExact
方法:
string date = "20121004";
string result = DateTime.ParseExact(date, "yyyyMMdd",
CultureInfo.InvariantCulture).ToString("yyyy-MM-dd");
这也提供了在使用连字符重新格式化日期之前验证日期的优势。 如果日期不在有效范围内或格式不匹配,ParseExact
会引发可以捕获的异常。
您我收到错误:
格式异常:字符串未被识别为有效的日期时间。
收到此错误是因为您没有告诉 ToDateTime() 方法如何解析您的字符串。
如果您使用以下方法:
public static DateTime ParseExact(
string s,
string format,
IFormatProvider provider,
DateTimeStyles style
)
您不会收到此错误。 生成 DateTime 变量后,只需使用 ToString() 方法以yyyy-dd-mm
格式显示它。
public string ToString(
string format,
IFormatProvider provider
)
http://msdn.microsoft.com/en-us/library/8tfzyc64
http://msdn.microsoft.com/en-us/library/9h21f14e
我知道这基本上重复了与其他人相同的信息,但它也使他能够理解他需要使用的两种方法的实际作用。
这是我
使用的扩展方法。
/// <summary>
/// Converts a string to a dateTime with the given format and kind.
/// </summary>
/// <param name="dateTimeString">The date time string.</param>
/// <param name="dateTimeFormat">The date time format.</param>
/// <param name="dateTimeKind">Kind of the date time.</param>
/// <returns></returns>
public static DateTime ToDateTime(this string dateTimeString, string dateTimeFormat, DateTimeKind dateTimeKind)
{
if (string.IsNullOrEmpty(dateTimeString))
{
return DateTime.MinValue;
}
DateTime dateTime;
try
{
dateTime = DateTime.SpecifyKind(DateTime.ParseExact(dateTimeString, dateTimeFormat, CultureInfo.InvariantCulture), dateTimeKind);
}
catch (FormatException)
{
dateTime = DateTime.MinValue;
}
return dateTime;
}
有点难看,但是这个怎么样?
date.Insert(6, "-").Insert(4, "-");
如果你可以假设你有一个代表有效日期的字符串,并且你不需要做任何其他日期逻辑,那么为什么要首先去DateTime
呢?