2015-03-09 2 views
0

Чтобы избежать ярлыка duplicate вот краткий обзор всего, что я сделал.Использование NodaTime для datetimepicker

Потратив несколько часов прибегая к помощи, чтобы вычислить разницу между двумя датами я наткнулся here и here где, я был убежден, чтобы использовать NodaTime, чтобы получить разницу в годах, месяцах и применение days.My нуждается в точности для расчета пенсии. Я использовал datetimepicker, чтобы получить значение даты из формы, а затем я использую Date.cs от here, чтобы извлечь дату в dd/mm/year, а затем вставить его в базу данных. Чтобы вычесть две даты, используя Period.Between(date1, date2, PeriodUnits.Years).Years, как я должен пройти datetimepicker?

Here's, что Джон Скит сказал: «Вы можете использовать LocalDateTime.FromDateTime, а затем использовать Date свойство, чтобы получить LocalDate».

Как я могу полностью избавиться от времени при вставке в базу данных, а также найти разницу при использовании datetimepicker вместо Datetime.

Update:

//Date of appointment 
var d_app = LocalDateTime.FromDateTime(dateTimePicker1.Value).Date; 
//Date of retirement 
var d_ret = LocalDateTime.FromDateTime(dateTimePicker2.Value).Date; 
var years=Period.Between(d_app,d_ret,PeriodUnits.Years).Years; 
var months = Period.Between(d_app, d_ret, PeriodUnits.Months).Months; 
var days = Period.Between(d_app, d_ret, PeriodUnits.Days).Days; 
MessageBox.Show(years.ToString()+" years"+months.ToString()+"months "+days.ToString()+"days"); 

Предоставление кода datetimepicker1.value как 2/21/1990 (d_app) и datetimepicker2.value как 3/09/2015 (d_ret) он вернулся 25 yrs 300months 9147 days.

Что я делаю неправильно?

+0

«но это не работает» не говорит нам ничего о том, что вы видите, - но это явно не правильный код, учитывая, что «DateTime datetimepicker.Days.ToString» ISN» t, даже слегка действительный как аргумент метода. Также нет необходимости использовать этот другой код «Дата». Почему вы называете «Дни»? Почему вы ссылаетесь на «ToString»? –

+0

Обратите внимание, что использование @JonSkeet для вопроса, который я не видел раньше, ничего не делает, кстати. –

+0

Похоже, вы просто хотите «var dateOfBirth = LocalDateTime.FromDateTime (dateTimePicker.Value) .Date;' –

ответ

3

Вы выполняете три отдельных расчетов здесь. Вам нужно только один:

var appointment = LocalDateTime.FromDateTime(dateTimePicker1.Value).Date; 
var retirement = LocalDateTime.FromDateTime(dateTimePicker2.Value).Date; 
var difference = Period.Between(appointment, retirement); 
MessageBox.Show(string.Format("{0} years {1} months {2} days", 
    difference.Years, difference.Months, difference.Days)); 
+0

Большое спасибо за правильный путь! –

+0

Не собираетесь ли 'Date.cs', я смогу получить' mm/dd/year', используя 'NodaTime' для вставки базы данных? –

+0

@CrystalHeart: Неясно, что вы имеете в виду, но вы не должны вставлять в базу данных с помощью * строк * вообще. Вероятно, вам захочется конвертировать обратно в 'DateTime' и установить значение параметра в вашей команде SQL таким образом. –

 Смежные вопросы

  • Нет связанных вопросов^_^