String.Contains 相当于使用 Regex 或其他优雅的东西
String.Contains equivalent using Regex or something elegant
我有以下列格式之一传递的 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
您可以使用简单的 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);
}
我有以下列格式之一传递的 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
您可以使用简单的 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);
}