String.Contains等效使用Regex或优雅的东西

时间:2015-03-02 22:25:10

标签: regex c#-4.0

我将DateTime字符串以下列格式之一传递

  • " 2015/03 / 02T00:10:41 + 11:00"
  • " 2015-03-02T00:10:41Z"
  • " 2015-03-02T00:10:41"

我想知道字符串是否包含(' Z'或' z')或(' +'或' - & #39;)能够区分各种DateTime字符串格式。

我可以使用String.Contains并完成工作。我有这样的东西,但它有效...... 我正在寻找一种优雅的方式,最好使用正则表达式。

// dateTimeValue  = "2015-03-02T00:10:41Z";
// dateTimeValue  = "2015-03-02T00:10:41";
// dateTimeValue  = "2015/03/02T00:10:41+11:00";

if (dateTimeValue.IndexOf("Z", StringComparison.OrdinalIgnoreCase) >= 0)
{
   // UTC ONLY DateTime
}
else if (dateTimeValue.Contains('+') || dateTime.Value.Contains('-')) 
{
  // User Time Only
}

(!Regex.IsMatch(dateTime.Value, @"^[\+\-]+$")) //doesn't work for the second conditional statement

1 个答案:

答案 0 :(得分:2)

您可以使用简单的string.IndexOf()StringComparison.OrdinalIgnoreCase(忽略大小写)来检查字符串中是否存在字符。 此外,由于连字符可以出现在日期部分,并且日期模式将始终包含“T”,我可以建议以下棘手的代码:

var date_and_times = new[] { "2015-03-02T00:10:41Z", "2015-03-02T00:10:41", "2015/03/02T00:10:41+11:00" };
foreach (var date_time in date_and_times)
{
     bool? contains_Z = null;
     if (date_time.Split(new[] {'T'})[1].IndexOf("z", StringComparison.OrdinalIgnoreCase) >= 0)
         contains_Z = true;
     else if (date_time.Split(new[] { 'T' })[1].Contains("+") || date_time.Split(new[] { 'T' })[1].Contains("-"))
         contains_Z = false;
     switch (contains_Z)
     {
         case true:
             // DateTime contains "Z" or "z"
             break;
         case false: 
             // DateTime contains "-" or "+"
             break;
         default:
             // DateTime has no "z", "Z", "+", or "-"
             break;
     }
 }

但是,由于您只想解析日期时间值,因此应使用DateTime.Parse()DateTime.ParseExact()

var date_and_times = new[] { "2015-03-02T00:10:41Z", "2015-03-02T00:10:41", "2015/03/02T00:10:41+11:00" };

foreach (var date_time in date_and_times)
{
  var dt = DateTime.Parse(date_time);
}