Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 19.05.2016, 09:01   #1
Rockot
Форумчанин
 
Аватар для Rockot
 
Регистрация: 01.06.2012
Сообщений: 139
По умолчанию Название месяцев.

Добрый день, помогите пожалуйста решить вопрос, нужно получить из диапазона дат то есть у меня две даты "С 1.01.2016" и "По 31.03.2016"

Функцию получения количества месяцев из этого диапазона я сделал, сложности возникли получить наименование каждого месяца.

Мне нужно будет записать их в массив, что бы потом работать с ними.
Пример:
0: январь
1: февраль
2: март

Опишите если сталкивались с подобной проблемой и как решить хоть на словах примерно.
Следствие: 99% проблем, сваливаемых на Microsoft, является следствием тупости самих программистов.
Rockot вне форума Ответить с цитированием
Старый 19.05.2016, 09:18   #2
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,526
По умолчанию

Код:
uses dateutils; 

for j:=MonthOf(d1) to Monthof(d2) do // работоспособно ЕСЛИ НЕТ перехода года 1.12.2015  - 31.03.2016  ==> :=12 to 3 !!!!
begin
  case j of
  1: a[n]:='январь'; // Мне нужно будет записать их в массив, 
...
  12: a[n]:='декабрь';
  end;
  n:=n+1;
end;
Код:
m1:=monthof(d1);
m2:=monthof(d2); 
if m2<m1 then m2:=m2+12; // в случае перехода 
for j:=m1 to m2 do

// НЕ БОЛЕЕ одного перехода
  case j of
  1, 13: .... 
....
  11, 23: ....
  end;
// или любое число переходов
  case ((j-1) mod 12)+1 of
  .....
  end;
end;
Код:
while d1<=d2 do 
  a[n]:=FormatDateTime('mmmm', d1);
  n:=n+1;
  IncMonth(d1,1);
end;
программа — запись алгоритма на языке понятном транслятору

Последний раз редактировалось evg_m; 19.05.2016 в 09:35.
evg_m вне форума Ответить с цитированием
Старый 19.05.2016, 09:24   #3
Rockot
Форумчанин
 
Аватар для Rockot
 
Регистрация: 01.06.2012
Сообщений: 139
По умолчанию

Цитата:
Сообщение от evg_m Посмотреть сообщение
Код:
uses dateutils; 

for j:=MonthOf(d1) to Monthof(d2) do // работоспособно ЕСЛИ НЕТ перехода года 1.12.2015  - 31.03.2016  ==> :=12 to 3 !!!!
begin
  case j of
  1: a[n]:='январь'; // Мне нужно будет записать их в массив, 
...
  12: a[n]:='декабрь';
  end;
  n:=n+1;
end;
Вот как раз проблема то в том что есть переход))
Следствие: 99% проблем, сваливаемых на Microsoft, является следствием тупости самих программистов.
Rockot вне форума Ответить с цитированием
Старый 19.05.2016, 09:42   #4
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,526
По умолчанию

смотри дополнения (код2 код3)

Цитата:
Вот как раз проблема то в том что есть переход))
так и надо было сразу акцентировать внимание на это (привести пример с такими датами или хотя бы упомянуть это).
программа — запись алгоритма на языке понятном транслятору

Последний раз редактировалось evg_m; 19.05.2016 в 09:45.
evg_m вне форума Ответить с цитированием
Старый 19.05.2016, 10:02   #5
min@y™
Цифровой кот
Старожил
 
Аватар для min@y™
 
Регистрация: 29.08.2014
Сообщений: 7,629
По умолчанию

Код:
// редкий случай использования нумерации массива с 1, а не с 0:
const 
  MONTHS: array[1..12] of PChar = 
    ('Январь', 'Февраль', ..., 'Декабрь');
Вариант из работающей программы:


Код:
const
  DaysOfWeek: array[1..7] of string = ('Понедельник',
                                       'Вторник',
                                       'Среда',
                                       'Четверг',
                                       'Пятница',
                                       'Суббота',
                                       'Воскресенье');

  DaysOfWeekShort: array[1..7] of string = ('Пн',
                                            'Вт',
                                            'Ср',
                                            'Чт',
                                            'Пт',
                                            'Сб',
                                            'Вс');

  Months: array[1..12] of ShortString = ('января', 'февраля', 'марта',
                                         'апреля', 'мая', 'июня',
                                         'июля', 'августа', 'сентября',
                                         'октября', 'ноября', 'декабря');
// ------------------
function GetDateStr: string;
var
  Year, Month, Day: Word;
  D: TDate;
begin
  D:= Date();
  DecodeDate(D, Year, Month, Day);
  Result:= Format('%s, %d %s %d', [DaysOfWeek[DayOfTheWeek(D)], Day, Months[Month], Year]);
end;
Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...
min@y™ вне форума Ответить с цитированием
Старый 19.05.2016, 11:07   #6
IliaIT
Форумчанин
 
Аватар для IliaIT
 
Регистрация: 17.03.2009
Сообщений: 977
По умолчанию

фигня какая то написана выше.
чем функция FormatDateTime не подошла?
Код:
FormatDateTime('mmmm', DateTime_tek)
вот и бегите от начальной даты добавляя месяц каждый раз к текущей переменной (IncMonth(DateTime_tek, 1); ) до тех пор пока месяц переменной не будет равен месяцу конечной даты.

как то так писал в блокноте.
Код:
DateTime_tek:=DateTime_nach;
n:=1;
repeat 
	a[n]:=FormatDateTime('mmmm', DateTime_tek);
	IncMonth(DateTime_tek);
	n:=n+1;
until DateTime_tek<DateTime_kon;
if MonthOf(DateTime_tek) = Monthof(DateTime_kon) then 
a[n]:=FormatDateTime('mmmm', DateTime_tek);
Интуитивно понятный интерфейс - это такой интерфейс, для работы с которым нужна недюжинная интуиция.

Последний раз редактировалось IliaIT; 19.05.2016 в 11:19.
IliaIT вне форума Ответить с цитированием
Старый 19.05.2016, 12:37   #7
min@y™
Цифровой кот
Старожил
 
Аватар для min@y™
 
Регистрация: 29.08.2014
Сообщений: 7,629
По умолчанию

Цитата:
фигня какая то написана выше.
Действительно. Чой-то я?...
Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...
min@y™ вне форума Ответить с цитированием
Старый 19.05.2016, 16:25   #8
Rockot
Форумчанин
 
Аватар для Rockot
 
Регистрация: 01.06.2012
Сообщений: 139
По умолчанию

Так ребят спасибо во первых всем за помощь, правда вы все были не правы, получил от начальника по шапке за говнокод...

Пишу для народа который будет искать подобное:
MonthsBetween( ); Возвращает число полных месяцев (с некоторой погрешностью) между дву*мя указанными значениями ANow и AThen типа TDateTime.

Так же история и с наименованием в делфи уже всё готово и можно получить наименование по номеру месяца и т.п.
Следствие: 99% проблем, сваливаемых на Microsoft, является следствием тупости самих программистов.
Rockot вне форума Ответить с цитированием
Старый 19.05.2016, 16:28   #9
min@y™
Цифровой кот
Старожил
 
Аватар для min@y™
 
Регистрация: 29.08.2014
Сообщений: 7,629
По умолчанию

Цитата:
правда вы все были не правы, получил от начальника по шапке за говнокод...
1. Начальник всегда прав.
2. См. п.1.
Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...
min@y™ вне форума Ответить с цитированием
Старый 19.05.2016, 16:32   #10
TaLadno
Форумчанин
 
Регистрация: 03.06.2015
Сообщений: 393
По умолчанию

Цитата:
Сообщение от Rockot Посмотреть сообщение
Так ребят спасибо во первых всем за помощь, правда вы все были не правы, получил от начальника по шапке за говнокод...
90% кода в интернете - говно
+
Сага о X, Y и Z...
+
Цитата:
Сообщение от min@y™ Посмотреть сообщение
1. Начальник всегда прав.
2. См. п.1.
Вы там держитесь.
TaLadno вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Почему при наличии конструктора в функции пишется название конструктора::и название метода класса? Мой повелитель Общие вопросы C/C++ 5 22.04.2016 00:41
с чего начать решение? Считать из файла название объемных геометрических фигур,вывести название,количество граней,рисунок (Delphi) леночка93 Помощь студентам 6 16.05.2013 13:14
Даны сведения о книгах в библиотеке: фамилия автора, название книги и год издания. Напечатать автора и название книг, го greshnik92 Общие вопросы C/C++ 3 21.06.2011 10:45