Неожиданное количество дней между двумя датами - PullRequest
2 голосов
/ 14 февраля 2012

Я работаю в ОС Windows 7 и вычисляю количество дней между двумя днями, используя приведенный ниже код:

DateTime dt = Convert.ToDateTime(txtNewIDDtAccRej.Text);
DateTime dtt = Convert.ToDateTime(txtNewIDDtInternal.Text);

TimeSpan t = dt - dtt;
txtNewProcessTime.Text = Convert.ToInt32(t.TotalDays).ToString();

Этот код работает нормально в моей системе, и значения появляются примерно так, как показано нижеimage:

Image1

На изображении выше временная часть составляет 00: 00: 00.

Но проблема заключается в развертывании того же кода на тестовом серверекоторый работает под управлением Windows Server 2003 R2, разница между двумя датами идет неправильно.Предположим, что разница между 08-02-2012 и 07-02-2012 составляет 1, а на тестовом сервере - 31. Я использую точно такой же код.

Вот изображение для тестового сервера:

Image of Test Server

В соответствии с изображением значение времени составляет 12:00:00.Что может быть причиной этого?

Ответы [ 3 ]

2 голосов
/ 14 февраля 2012

Вместо Convert.ToDateTime используйте DateTime.TryParse с CultureInfo. Проблема может быть на сервере. Культура отличается от вашей локальной машины.

ИЛИ

Вы можете использовать DateTime.ParseExact. Здесь вы также можете указать формат даты. Читать дальше @ MSDN .

Вы можете попробовать это

string s = "08-02-2012";
string format ="dd-MM-yyyy";
//Get DateTime
DateTime dateTime = DateTime.ParseExact(s, format,new System.Globalization.CultureInfo("en-US"));
//Get string representation of DateTime
string date = dateTime.ToString(format, new System.Globalization.CultureInfo("en-US"));

Это будет работать одинаково на всех машинах.

Надеюсь, это решит вашу проблему.

2 голосов
/ 14 февраля 2012

Я думаю, это из-за форматирования даты (локализации). В вашем компьютере 08-02-2012 означает February 8th (dd-MM-yyyy), а 07-02-2012 - February 7th, следовательно, разница составляет один день. На сервере это интерпретируется как August 2nd и July 2nd (MM-dd-yyyy). Таким образом, разница составляет 31 день.
Ниже приведен фрагмент для решения проблемы: ( не проверено )

 CultureInfo en = new CultureInfo("en-US");
 var format = "dd/MM/yyyy";
 DateTime myDate =  DateTime.ParseExact(myDateStr,format,en.DateTimeFormat);
0 голосов
/ 14 февраля 2012

Обе системы сообщают об одном и том же времени в разных форматах.Ваша система сообщает время в 24-часовом формате (00:00:00), а тестовый сервер использует 12-часовой формат (12:00:00 AM).Для целей расчета даты совпадают.Если вам требуется определенный формат при выводе, используйте DateTime.Format ().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...