我一直在使用这个函数,我将它放在一起以DateTime
格式提取MM/DD/YYYY HH:MM:SS PM
。我正在解析的Excel文件现在正在被修改,要拆分的字符现在是 EITHER a +
或-
,而之前 ONLY < / strong> a +
我试图修改我的语法来获取一个字符数组,但是这样做我现在得到2个编译错误:
参数1:无法转换为&#39; string []&#39;到&#39; char&#39;
最好的重载方法匹配&#39; string.IndexOf(char)&#39;有一些无效的论点
如何更新以接受一组字符?
将传递给函数的2种样本格式为:
07/22/2016 05:22:00 PM + 00:00
07/22/2016 12:00:00 AM - 04:00
功能是:
public static string FormatToUsableDateTime(string DateToConvert)
{
convertedDateTime = null;
var charstocheck = new[]
{
"+",
"-"
};
int index = DateToConvert.IndexOf(charstocheck);
convertedDateTime = (index > 0 ? DateToConvert.Substring(0, index) : "");
return convertedDateTime;
}
答案 0 :(得分:2)
您可以使用IndexOfAny
method:
var charstocheck = new[]
{
'+',
'-'
};
int index = DateToConvert.IndexOfAny(charstocheck);
请注意,IndexOfAny
接受char
而不是string
的数组,因此我将chartocheck
的类型更改为char[]
。
答案 1 :(得分:2)
因为您在var
变量中使用charstocheck
并且没有明确说明数据类型,所以编译器将其指定为string[]
,从您放置数据的方式来判断(通过包装他们用“......”代替“......”)
此外,IndexOf
只会检查单个字符,因此您无法将数组(无论是string[]
还是char[]
)作为输入。
您可以做的是检查 string
中存在哪个字符(+或 - )以及IndexOf
中使用的:
public static string FormatToUsableDateTime(string DateToConvert)
{
convertedDateTime = null;
char chartocheck = DateToConvert.Contains('+') ? '+' : '-';
int index = DateToConvert.IndexOf(chartocheck);
convertedDateTime = (index > 0 ? DateToConvert.Substring(0, index) : "");
return convertedDateTime;
}
这符合这种情况,因为您只需要检查两个字符, +或 - 。如果要检查的字符数超过两个,则可以考虑使用IndexOfAny
修改强>
BACON指出,“检查是否存在”以及“使用 - 如果存在”的模式在大多数情况下效率低下,我同意这一点。 “检查并使用 - 如果存在”通常是更好的解决方案。因此,上述代码可以替换为IndexOfAny
(如BACON回答)或
int index = DateToConvert.IndexOf('+'); //guess what is more often to come
if (index < 0) //if proven wrong, guess take the other
index = DateToConvert.IndexOf('-');
更有效的解决方案。
答案 2 :(得分:1)
这是因为。IndexOf()
方法,它有9个重载选项但没有人接受字符串数组作为输入参数。你必须做这样的事情:
int index = DateToConvert.IndexOfAny(charstocheck);
这将返回指定Unicode字符数组中此字符串中任何字符的第一次出现的从零开始的索引。但在这种情况下,您应该将charstocheck
从字符串数组更改为如下字符数组:
var charstocheck = new[] { '+', '-' };
答案 3 :(得分:1)
如果您查看日期,07/22/2016 05:22:00 PM + 00:00
问题,我提出的问题+ 00:00
就是+
和00:00
之间的空格所以如果我们删除该空格,将能够像这样
string smdt = "07/22/2016 05:22:00 PM + 00:00";
//Find the character. if it is + or -
string chartocheck = smdt.Contains("+") ? "+" : "-";
//Remove the space between the + / - and time
string Correctedsmdt = smdt.Replace(chartocheck + " ", chartocheck);
//This is the string format which is going to parse the Date
string format = "MM/dd/yyyy h:mm:ss tt zzz";
DateTime dt = DateTime.ParseExact(Correctedsmdt, format, CultureInfo.InvariantCulture, DateTimeStyles.AssumeUniversal);