Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/csharp-4.0/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 包含使用正则表达式或其他优雅的东西的等价项_Regex_C# 4.0 - Fatal编程技术网

Regex 包含使用正则表达式或其他优雅的东西的等价项

Regex 包含使用正则表达式或其他优雅的东西的等价项,regex,c#-4.0,Regex,C# 4.0,我使用以下格式之一传递DateTime字符串 “2015/03/02T00:10:41+11:00” “2015-03-02T00:10:41Z” “2015-03-02T00:10:41” 我想知道字符串是否包含('Z'或'Z')或('+'或'-'),以便能够区分各种日期时间字符串格式 我可以使用String.Contains并完成任务。我有类似的东西,它可以工作,但是。。。 我正在寻找一种优雅的方法,最好使用正则表达式 // dateTimeValue = "2015-03-02T00

我使用以下格式之一传递DateTime字符串

  • “2015/03/02T00:10:41+11:00”
  • “2015-03-02T00:10:41Z”
  • “2015-03-02T00:10:41”
我想知道字符串是否包含('Z'或'Z')或('+'或'-'),以便能够区分各种日期时间字符串格式

我可以使用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

您可以将simple
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值,因此应该使用
datetime.parse()
datetime.ParseExact()


我会和你一起去的,谢谢你,雷姆斯。我将使用您关于DateTime的答案。解析而不是手动处理字符串。您如何区分选项1和选项13@InquisitiveLad:问题是“如果字符串包含('Z'或'Z')或('+'或'-')”。无论如何,问题的标题不是关于解析日期时间值,而是问题本身。为了“艺术的缘故”,我会更新这个问题。我已经接受了你的代码作为答案。很抱歉,这个问题有误导性。
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);
}