0

鉴于以下情况,将string.Compare(timeA,TimeB)始终返回 -1:

timeA是之前发生的时间戳timeB

两者都是这种格式:12/27/2012 00:59:06又名mm/dd/yyyy hh:mm:ss通过DateTime.UtcNow

4

4 回答 4

5

嗯,是。你为什么希望它起作用?如果要按time排序,请将它们都解析为DateTime值并进行比较。您将它们作为字符串进行比较,因此它们将按字典顺序进行比较。当然,如果您的时间戳格式是yyyy-MM-ddTHH:mm:ss或类似的,您可以按字典顺序比较它们 - 但您当前的格式并不是为排序而设计的。

可以编写一个IComparer<string>which 每次都进行解析,但您最好尽可能早地解析这些值,并DateTime尽可能长时间地将它们保持在它们更原生的表示 ( ) 中。

于 2012-12-26T12:14:04.153 回答
0

你正在比较你Timestamps作为一个string. 只需使用<>DateTime.Parse()

value timea = DateTime.Parse(timeA);
value timeb = DateTime.Parse(timeB);

if( timeA > timeB )
{
  // your code...
}
于 2012-12-26T12:17:25.490 回答
0

为了

string.Compare(timeA, timeB) 

工作,timeA并且timeB必须是字符串。并且字符串按字母顺序进行比较,因此以 1 开头的字符串(例如'12/27/2012' )总是小于以 2 开头的字符串,例如'2/27/2010'

为了比较日期,您可以使用:

DateTime.Compare(timeA, timeB) 

在哪里timeAtimeBDateTime的。如果如您所说,它们都是在您的代码中生成的,请避免.ToString()在它们上使用 a 。

于 2012-12-26T12:17:37.690 回答
0
String.Compare(string strA, string strB);

返回: // 一个 32 位有符号整数,指示 // 两个比较数之间的词法关系。值 条件 小于零 strA 小于 strB。零 // strA 等于 strB。大于零 strA 大于 strB。

于 2012-12-26T12:17:51.900 回答