открытый вопрос к уважаемому игорю петрову
про время, даты ....
ввиду развернутости вопроса, приложил его отдельным файлом.
заранее спасибо.
открытый вопрос к уважаемому игорю петрову
про время, даты ....
ввиду развернутости вопроса, приложил его отдельным файлом.
заранее спасибо.
Последний раз редактировалось Валенок; 03.02.2012 в 22:38.
Прошу прощения что вмешался.
и в то-же время в разделе справки Идентификаторы переменных, границы для TOD не указаны.TIME, TIME_OF_DAY (сокр. TOD) содержит время суток, начиная с 0 часов (с точностью до миллисекунд). Диапазон значений TOD от: 00:00:00 до 23:59:59.999
т.е. здесь не бред кодесиса, а того кто хелп писал.
а ещё в хелпе есть такая строчка
В той же справке есть описание того что такое сложение переменных "+"TIME1 := T#100S12ms; (*Старший компонент может выходить за свой предел*)
DATE в этом списке нет!!!ADD
Сложение переменных типов: BYTE, WORD, DWORD, SINT, USINT, INT, UINT, DINT, UDINT, REAL и LREAL.
Две переменных типа TIME можно складывать (напр. t#45s + t#50s = t#1m35s). Результат имеет тип TIME.
т.е. сторочку
DATE1 := D#2010-12-10 + T#1d;
кодесис естественно выполнит так как и должен это сделать, преобразует константы в DWORD, выполнит сложение и то что получилось отобразит как дату, т.е полную фигню
Я ноль в кодесисе, но кое что знаю о других языках, например кое где есть функция dateadd.
На детские грабли наступаем? и требуем от компилятора телепатических способностей?
Последний раз редактировалось BETEP; 06.12.2010 в 09:28.
можно и я 5 коп?
уважаемый коллега пишет
не могу понять вашу позицию. то, что где-то в хелпах вы нашли обоснование неудобства кдс - позволяет всем плясать и веселиться? ну, описано, что именно так кдс должен вести себя, как и ведет.
так что? вы против того, чтобы он вел себя более ожидаемо (инженерами)?
товарищ валенок и пишет, что он ожидает от столь классной системы. я вполне присоединяюсь (насколько я смог понять). наличие описания неудобностей в хелпе не мешает нам хотеть лучшего.
или?
З.Ы. Блин, да что же это делается с большими буковками??? ЩАС Ветер найдет, что в описании форума есть таки обоснование, что буковки могут (в зависимости от погоды в Зажопинске) преобразовываться в строчные... Тогда и просить админов разобраться с багом не будет оснований
Последний раз редактировалось drvlas; 05.12.2010 в 15:42.
Все непонятки от того что начали писать программы на верхних языках пропустив понимание самих основ программирования.
Пытаюсь объяснить:
TOD#24:00:01 результат неожидан только если забыть что для машины это 32 бита. а на хелп ссылаюсь для того что-бы обратить внимание на противоречие в нём.
Про сложения и вычитания дат и времени.
DATE1 := DATE2-DATE3; для компилятора ошибка
DATE1 := D#2010-12-10 + T#1d; не ошибка, но кажется странным? а странного ничего нет. запись константы как D#2010-12-10 придумана для удобства человека, реально это опять 32 бита которые без калькулятора человеку не переварить. Для нашего с вами удобства компилятор разберёт текстовую строку на составляющие, выполнит расчёт и запишет в проге 4D016D80. тоже самое сделает и со вторым операндом т.е. запишет как 5265C00.
фактически получается что человек просит машину сложить два числа результат сложения которых 5227C980, это он и запишет в память. Но человеку хочется отобразить это число как дату, ну и пускай посмотрит на D#2013-09-05.
Получается интересная ситуация, кодесис и все остальные для нашего удобства пытаются отобразить для человека информацию в привычном для него виде, как дату, время или десятичное число, а его за это пинают.
А вот мне когда то приходилось записывать в память REAL так, как оно выглядит в шестнадцатиричном виде, контроллер работал с форматом REAL, но компилятор не поддерживал записи константы как asd:=13.5; но позволял записать в ячейку памяти где хранится REAL всё что угодно, ну за сколько секунд вы разложите 13.5 на биты, а потом эти биты пересчитаете в DWORD? конечно можно было без проблем записать число REAL сразу в память контроллера, а не извращаться в программе, только вот прога на флешь пишется, а ретайн на батарейке была. Ну не хотелось мне что-бы контроллер чудить начал через несколько лет когда батарейку забудут заменить.
Или вам в голову не придёт так "странно и неправильно" поступить? Надеюсь теперь понятно, что чьи-то непонятки по поводу DATE1 := D#2010-12-10 + T#1d; у меня вызывают смех?
ну, смейтесь, это же нормально
а зачем нам-то не позволять предлагать то, что кажется лучшим? неужели ваши проблемы с не очень удобным компилятором дают мне какое-то основание не хотеть простого: прибавить к дате 1 день и получить точно следующую дату?
да мне просто не интересно, как коряво это сейчас сделано в кдс. есть миллион способов сделать операции с данными. выбран кое в чем неудачный способ. пытаемся обратить внимание людей, реально влияющих на процесс (мы недеемся). с уважением и без истерик. почему же вы закрываете амбразуру там, где никто этого не просит? вот игорь викторович ответит, посмотрим, насколько ему нужна будет поддержка
Про dateadd слышали?
В писме нет просьбы о добавления в кодесис этой функции, а только баловство с константами и форматами, ну и ошибочные рассуждения из-за непонимания что такое константы и форматы.
Кстати прикольно, в описании к ADD и SUB нет упоминания о работе с DATE, но Вы с Валенком упорно считаете что ADD ОБЯЗАНО выполнять операции с датой, а хелпы и мануалы пишут для ..........
Учится, учится и чё там дедушка ещё говорил?
з.ы. а редактор в кодесисе ужасный, так не хватает мелких фичей как например в VBA, я не защищаю кодесис, редактор для LD наверно там самый худший, переменные списком а не таблицей, поиск не фонтан. Я просто пытаюсь объяснить что Валенок заблуждается споткнувшись на элементарном. Кодесис очень неплохо работает с датой, и его создатели наверно посчитали что dateadd излишне, так как отсутствие этой функции легко обходится. Прикол кстати в том, что одной dateadd не отделаться, пользователю ведь для своего удобства обязательно захочется полный набор стандартных функций (как в некоторых языках) для работы с датой.
Последний раз редактировалось BETEP; 05.12.2010 в 18:58.
а вот я умею признавать свои ошибки... прочитайте внимательно мой первый пост.
Он был для Вас. На всякий случай подредактировал и выделил ключевую фразу красненьким.
Остальные посты это ответы для drvlas и разжёвывание что такое константы.
Последний раз редактировалось BETEP; 06.12.2010 в 09:38.
господа, давайте чуть больше позитива...
опять же скоро новый год и рождество...
на сколько я знаю на этой неделе игорь ответить не сможет, так что давайте дождемся его комментариев
Андрей, ну разве это не позитив?в училище рассказали. Бауманском.
Последний раз редактировалось BETEP; 06.12.2010 в 11:03.
Ну уже лучше, Вы задумались.
про TOD#24:00:01 похоже вы уже согласились что это косяк хелпа а не кодесиса.
теперь о DATE1 := D#2010-12-10 + T#1d;
Предполагаю что вы то-же согласились что это не должно работать по той простой причине что тип данных DATE не предназначен для работы с функцией ADD. Поэтому возникает вопрос почему компилятор не матерится на DATE1 := DATE2+TIME1; с одной стороны это плохо, т.к. нарушено правило о типах данных и как компилятор в таком случае должен поступить? Привести к одному типу? к DWORD? или всё таки сматерится?
Вот тут уже можно начать спор о том как реагировать компилятору на запрос программиста, послать его, или руководствуясь другими правилами выполнить? И этот спор будет бесполезным, сколько людей столько и мнений, я например за то что-бы компилятор ко мне относился с уважением, и разрешал фокусы в надежде что я понимаю что делаю.
Обратите внимание, DATE1 := DATE2-DATE3; для компилятора ошибка, тип в данных совпадает и их не нужно приводить к одному типу. DATE1 := DATE2+TIME1; тип данных разный, их нужно привести к DWORD а для DWORD ADD работает. т.е. я не вижу непоняток. Компилятор ведь не телепат, он не может угадать что Вы думаете так, а я по другому.
Начинаю подозревать что dateadd сделали специально для того, чтобы избежать подобных недоразумений со стороны программистов.
Последний раз редактировалось BETEP; 06.12.2010 в 12:19.