Получить триместр (квартал) код в C # - PullRequest
2 голосов
/ 05 мая 2011

Мне нужно было получить соответствующий триместр (периоды 3 месяца, т.е. первый триместр января, февраля и марта) данной даты.Используя структуру c # System.DateTime, мне не удалось найти метод для того, что я искал.Поэтому я решил так:

DateTime sDeathDate = DateTime.Parse("18/09/1970");
int iDeathTrimester = Convert.ToInt32(Math.Round(Convert.ToDouble(sDeathDate.Month) / 3 + 0.25));

Если кто-то знает более простой способ сделать это, пожалуйста, ответьте.

Андре

Ответы [ 4 ]

12 голосов
/ 05 мая 2011

Если предположить, что январь - март - это триместр 1, апрель - июнь - это триместр 2, июль - сентябрь - это триместр 3, а октябрь - декабрь - триместр 4, тогда вы можете использовать

int trimester = (sDeathDate.Month - 1) / 3 + 1

Это то же самое, что четверть, вы имели в виду что-то другое?

3 голосов
/ 05 мая 2011

Math.Ceiling Возвращает наименьшее целое число, большее или равное указанному числу.

DateTime sDeathDate = DateTime.Parse("18/11/1970");
int trimester = (int)Math.Ceiling(sDeathDate.Month/3.0);

Обратите внимание, что код использует 3.0 для выполнения деления с плавающей запятой, а не целочисленного деления

1 голос
/ 13 мая 2011

Библиотека периодов времени для .NET включает класс Квартал (период 3 месяца):

// ----------------------------------------------------------------------
public void QuarterOfDateSample()
{
  DateTime moment = new DateTime( 1970, 9, 15 );
  Console.WriteLine( "Quarter  : {0}", new Quarter( moment ) );
  // > Quarter  : Q3 1970; 01.07.1970- 30.09.1970| 91.23:59

  Console.WriteLine( "Quarter  : {0}", new Quarter( 2006, YearQuarter.First ) );
  // > Quarter  : Q1 2006; 01.01.2006 - 31.03.2006 | 89.23:59
} // QuarterOfDateSample
0 голосов
/ 05 мая 2011

Если вы используете Math.Round (Double, MidpointRounding) , вы можете сделать раунд лучше без добавления 0,25

Увидимся

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