разница дат между двумя датами - PullRequest
0 голосов
/ 27 февраля 2012

Я хочу вычислить разницу в дате между датой формы и двумя датами. Я использую временной интервал для вычисления разницы между двумя датами, если разница в дате положительна, означает, что она входит в другой процесс, падает означает, что она возвращает сообщение об ошибке.

Мой частичный код здесь ..

  TimeSpan span = Convert.ToDateTime(txtenddate.Text).Subtract(Convert.ToDateTime(txtstartdate.Text));
        int formatted = span.Days;
        if (formatted < 1)
        {
            ScriptManager.RegisterStartupScript(this, this.GetType(), "temp", "<script language='javascript'>alert('Invalid date difference ');</script>", false);
        } 

В приведенном выше коде ввод даты окончания: 30-01-2004 дата начала: 01-02-2002

, но он возвращает сообщение об ошибке: Строка не была распознана как действительный DateTime.

, пожалуйста, дайте мне решение, чтобы решить эту проблему без изменения формата даты ...

Ответы [ 5 ]

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

Вы должны использовать ParseExact, чтобы получить соответствующий DateTime.

TimeSpan ts = DateTime.ParseExact("30-01-2004", "dd-MM-yyyy", System.Globalization.CultureInfo.InvariantCulture)
                  - DateTime.ParseExact("01-02-2002", "dd-MM-yyyy", System.Globalization.CultureInfo.InvariantCulture);

При использовании Convert.ToDateTime он вызывает DateTime.Parse, который попытается выполнить преобразование, соответствующее вашей текущей настройке культуры, котораятак как в этом случае вы не поддерживаете формат DateTime, который у вас есть, поэтому вам следует полагаться на ParseExact, благодаря которому вы знаете формат, в котором ожидается строка, и добиваетесь получения результатов.

1 голос
/ 27 февраля 2012

Вы должны использовать CultureInfo, возможно, CultureInfo по умолчанию отличается от "en-GB";

var cult = new System.Globalization.CultureInfo("en-GB");
TimeSpan span = Convert.ToDateTime("30-01-2004", cult).Subtract(Convert.ToDateTime("01-02-2002", cult));
1 голос
/ 27 февраля 2012

Вам необходимо указать культуру для конвертации.По умолчанию он должен использовать формат даты по умолчанию для вашего ПК, но это не всегда работает.

Об этом необходимо узнать при указании поставщика формата для метода Convert.ToDateTime http://msdn.microsoft.com/en-us/library/9xk1h71t.aspx

и это об объекте DateTimeFormatInfo, который вам нужно будет создать для обработки культуры: http://msdn.microsoft.com/en-us/library/system.globalization.datetimeformatinfo.aspx

0 голосов
/ 26 июля 2018

для разницы дней

  public long getDaysBetweenDates(Date d1, Date d2){
return TimeUnit.MILLISECONDS.toDays(d1.getTime() - d2.getTime());
}

Разница во времени между днями со временем

Date startDate = // Set start date
Date endDate   = // Set end date

long duration  = endDate.getTime() - startDate.getTime();

long diffInSeconds = TimeUnit.MILLISECONDS.toSeconds(duration);
long diffInMinutes = TimeUnit.MILLISECONDS.toMinutes(duration);
long diffInHours = TimeUnit.MILLISECONDS.toHours(duration);
0 голосов
/ 27 февраля 2012

Ваш формат даты должен быть таким.StartDate = 1/2/2002 и EndDate = 3/1/2004

...