次の場合、使用するstring.Compare(timeA,TimeB)
と常に -1 が返されます。
timeA
以前に発生したタイムスタンプですtimeB
と
両方ともこの形式です: 12/27/2012 00:59:06
aka mm/dd/yyyy hh:mm:ss
viaDateTime.UtcNow
はい、そうです。なぜそれがうまくいくと期待するのですか?timeで並べ替えたい場合は、両方を値に解析してDateTime
比較します。それらを文字列として比較しているので、辞書順に比較されます。もちろん、タイムスタンプ形式がyyyy-MM-ddTHH:mm:ss
または類似のものである場合、それらを辞書的に比較できますが、現在の形式は並べ替え用に設計されていません。
毎回解析を行う を作成することもできますが、できるだけ早く値を解析し、よりネイティブな表現 ( ) でできるだけ長く保持する方がはるかに優れています。IComparer<string>
DateTime
Timestamps
として比較していますstring
。を使用するだけ<
で>
DateTime.Parse()
value timea = DateTime.Parse(timeA);
value timeb = DateTime.Parse(timeB);
if( timeA > timeB )
{
// your code...
}
為に
string.Compare(timeA, timeB)
文字列でなければなりませんtimeA
。timeB
また、文字列はアルファベット順に比較されるため、'12/27/2012' のように 1 で始まる文字列は、'2/27/2010 'のように 2 で始まる文字列よりも常に小さくなります。
日付を比較するには、次を使用できます。
DateTime.Compare(timeA, timeB)
とtimeA
はtimeB
ですDateTime
。あなたが言うように、それらが両方ともコードで生成されている場合は、それらに a を使用しない.ToString()
でください。
String.Compare(string strA, string strB);
戻り値: // 2 つの比較演算子間の字句関係を示す 32 ビットの符号付き整数 // 値 条件 0 未満 strA は strB より小さい。ゼロ // strA は strB に等しい。ゼロより大きい strA は strB より大きい。