C# 日期字符串解析与时间验证实战
在实际开发中,处理用户输入的日期和时间字符串是常见需求。直接转换往往容易因格式不匹配或区域设置不同导致异常,因此我们需要更稳健的解析方案。
标准日期格式解析
针对常见的日期格式,推荐使用 DateTime.TryParseExact 方法。相比 Parse,它不会抛出异常而是返回布尔值,配合 out 参数能安全地获取结果。同时指定 CultureInfo.InvariantCulture 可以避免因系统区域设置(如中文/英文环境)导致的解析差异。
纯数字格式 (yyyyMMdd)
string str = "20120804";
DateTime dt;
if (DateTime.TryParseExact(str, "yyyyMMdd", CultureInfo.InvariantCulture, DateTimeStyles.AllowWhiteSpaces, out dt))
{
return dt.ToString("yyyy-MM-dd");
}
带分隔符格式 (yyyy-MM-dd)
string str = "2012-08-04";
DateTime dt;
if (DateTime.TryParseExact(str, "yyyy-MM-dd", CultureInfo.InvariantCulture, DateTimeStyles.AllowWhiteSpaces, out dt))
{
return dt.ToString("yyyy-MM-dd");
}
上述两种情况最终都会统一输出为 yyyy-MM-dd 的标准形式,便于后续存储和展示。
自定义时间字符串校验
有时候我们只关心时间部分(例如 HH:mm),或者需要更严格的范围控制。下面是一个简单的校验逻辑,用于验证字符串是否符合 HH:mm 格式且数值在合法范围内。
public bool IsTime(string strTime)
{
if (strTime == null) { strTime = ""; }
string[] _time = strTime.Split(':');
if (_time.Length != 2) { return false; }
for ( i = ; i <= ; i++)
{
{
.Parse(_time[i]);
}
{
;
}
}
hour = .Parse(_time[]);
minute = .Parse(_time[]);
(hour < || hour > || minute < || minute > )
{
;
}
;
}

