2013-03-27 3 views
2

Мне нужно сравнить две даты, включая секунды. Я обыскал в Интернете и получил два метода. Один из них - импорт Microsoft.VisualBasic dll. Результат не тот, когда он запускает одни и те же данные. Я думаю, что C# должен делать то же самое без импорта VisualBasic. Может кто-то указать мне путь, чтобы он работал на C#?Сравните datetime получить другой результат

Заранее спасибо.

Существует один с помощью Microsoft.VisualBasic

if (Math.Abs(DateAndTime.DateDiff(DateInterval.Second, 
    Conversions.ToDate(colFilesFound[RuntimeHelpers.GetObjectValue(rw["file_path"])]), 
    Conversions.ToDate(rw["last_modified_timestamp"]), 
    FirstDayOfWeek.Sunday, FirstWeekOfYear.Jan1)) == 0L) 
{ 
    unchangedFileNum++; 
    Console.WriteLine("unchange"); 
} 
else 
{ 
    modifiedFileNum++; 
    Console.WriteLine("change"); 
} 

Существует еще один метод не используется Visual.dll:

DateTime fileLastModifiedDate = Conversions.ToDate(colFilesFound[rw["file_path"]]); 
DateTime dataLastModifiedDate = Conversions.ToDate(rw["last_modified_timestamp"]); 
if (Math.Abs((fileLastModifiedDate - dataLastModifiedDate).TotalSeconds) == 0L) 
{ 
    Console.WriteLine("File Date: " + colFilesFound[rw["file_path"]] + 
      " <> Database Date: " + Conversions.ToString(rw["last_modified_timestamp"])); 
    unchangedFileNum++; 
    Console.WriteLine("unchange"); 
} 
else 
{ 
    modifiedFileNum++; 
    Console.WriteLine("change"); 
} 
+0

Что такое Conversions.ToDate? Это не поможет, что вы не предоставили нам никаких выборочных данных, и ваш код без необходимости использует другой код. Пожалуйста, отправьте короткую, но * полную * программу, демонстрирующую проблему. –

+0

Почему вы просто не используете оператор '==' для проверки равенства? – ken2k

+1

Не могли бы вы сравнить «Ticks» или слишком гранулированный? – Yuck

ответ

3

Правильный способ сравнения DateTimes в .NET использует оператор == или вызов метода DateTime.Compare():

DateTime fileLastModifiedDate = ...; 
    DateTime dataLastModifiedDate = ...; 

    if (fileLastModifiedDate == dataLastModifiedDate) 
    { 
     ... 
    } 

Необходимо учитывать преципитация. Иногда у вас не может быть достаточной перестройки для рассмотрения миллисекунд. В этом случае вам нужно сравнить даты без учета миллисекунды:

public static bool IsSameDateWithoutMilliseconds(DateTime d1, DateTime d2) 
{ 
    return d1.Subtract(d2).TotalSeconds == 0; 
} 
+0

Вы теряете информацию DateTimeKind ... – ken2k

+0

Уродливая. Не будет 'd1.Subtract (d2) .TotalSeconds;' будет проще. – I4V

+2

Зачем вам «Math.Abs»? – I4V

0

Ваша проблема скорее всего миллисекунды, так как те, вероятно, не равно, как вы проверить DateTimes.

DateTime fileLastModifiedDate = Conversions.ToDate(colFilesFound[rw["file_path"]]); 
DateTime dataLastModifiedDate = Conversions.ToDate(rw["last_modified_timestamp"]); 

fileLastModifiedDate = fileLastModifiedDate.AddMilliseconds(-fileLastModifiedDate.Millisecond); 
dataLastModifiedDate = dataLastModifiedDate.AddMilliseconds(-dataLastModifiedDate.Millisecond); 

if (DateTime.Compare(fileLastModifiedDate, dataLastModifiedDate) == 0) 
{ 
    // dates are equal 
} 
else 
{ 
    // dates are not equal 
} 
Смежные вопросы