Страница 1 из 3 123 ПоследняяПоследняя
Показано с 1 по 10 из 28

Тема: к петрову и. (про время и даты ...)

  1. #1
    Пользователь
    Регистрация
    23.09.2008
    Адрес
    Центророссийск
    Сообщений
    2,251

    По умолчанию к петрову и. (про время и даты ...)

    открытый вопрос к уважаемому игорю петрову

    про время, даты ....

    ввиду развернутости вопроса, приложил его отдельным файлом.

    заранее спасибо.
    Последний раз редактировалось Валенок; 03.02.2012 в 22:38.

  2. #2

    По умолчанию

    Прошу прощения что вмешался.
    TIME, TIME_OF_DAY (сокр. TOD) содержит время суток, начиная с 0 часов (с точностью до миллисекунд). Диапазон значений TOD от: 00:00:00 до 23:59:59.999
    и в то-же время в разделе справки Идентификаторы переменных, границы для TOD не указаны.
    т.е. здесь не бред кодесиса, а того кто хелп писал.
    а ещё в хелпе есть такая строчка
    TIME1 := T#100S12ms; (*Старший компонент может выходить за свой предел*)
    В той же справке есть описание того что такое сложение переменных "+"
    ADD
    Сложение переменных типов: BYTE, WORD, DWORD, SINT, USINT, INT, UINT, DINT, UDINT, REAL и LREAL.
    Две переменных типа TIME можно складывать (напр. t#45s + t#50s = t#1m35s). Результат имеет тип TIME.
    DATE в этом списке нет!!!

    т.е. сторочку
    DATE1 := D#2010-12-10 + T#1d;
    кодесис естественно выполнит так как и должен это сделать, преобразует константы в DWORD, выполнит сложение и то что получилось отобразит как дату, т.е полную фигню

    Я ноль в кодесисе, но кое что знаю о других языках, например кое где есть функция dateadd.
    На детские грабли наступаем? и требуем от компилятора телепатических способностей?
    Последний раз редактировалось BETEP; 06.12.2010 в 09:28.

  3. #3
    Пользователь Аватар для drvlas
    Регистрация
    30.09.2010
    Адрес
    Киев
    Сообщений
    700

    По умолчанию

    можно и я 5 коп?

    уважаемый коллега пишет
    Цитата Сообщение от betep Посмотреть сообщение
    в разделе справки идентификаторы переменных, границы для Tod не указаны.
    т.е. здесь не бред кодесиса, а того кто хелп писал.
    ...
    в той же справке есть описание того что такое сложение переменных "+"
    Date в этом списке нет!!!
    ...
    на детские грабли наступаем? и требуем от компилятора телепатических способностей?
    не могу понять вашу позицию. то, что где-то в хелпах вы нашли обоснование неудобства кдс - позволяет всем плясать и веселиться? ну, описано, что именно так кдс должен вести себя, как и ведет.
    так что? вы против того, чтобы он вел себя более ожидаемо (инженерами)?

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

    или?

    З.Ы. Блин, да что же это делается с большими буковками??? ЩАС Ветер найдет, что в описании форума есть таки обоснование, что буковки могут (в зависимости от погоды в Зажопинске) преобразовываться в строчные... Тогда и просить админов разобраться с багом не будет оснований
    Последний раз редактировалось drvlas; 05.12.2010 в 15:42.

  4. #4

    По умолчанию

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

    Пытаюсь объяснить:
    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; у меня вызывают смех?

  5. #5
    Пользователь Аватар для drvlas
    Регистрация
    30.09.2010
    Адрес
    Киев
    Сообщений
    700

    По умолчанию

    ну, смейтесь, это же нормально

    а зачем нам-то не позволять предлагать то, что кажется лучшим? неужели ваши проблемы с не очень удобным компилятором дают мне какое-то основание не хотеть простого: прибавить к дате 1 день и получить точно следующую дату?

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

  6. #6

    По умолчанию

    Про dateadd слышали?

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

    Кстати прикольно, в описании к ADD и SUB нет упоминания о работе с DATE, но Вы с Валенком упорно считаете что ADD ОБЯЗАНО выполнять операции с датой, а хелпы и мануалы пишут для ..........

    Учится, учится и чё там дедушка ещё говорил?

    з.ы. а редактор в кодесисе ужасный, так не хватает мелких фичей как например в VBA, я не защищаю кодесис, редактор для LD наверно там самый худший, переменные списком а не таблицей, поиск не фонтан. Я просто пытаюсь объяснить что Валенок заблуждается споткнувшись на элементарном. Кодесис очень неплохо работает с датой, и его создатели наверно посчитали что dateadd излишне, так как отсутствие этой функции легко обходится. Прикол кстати в том, что одной dateadd не отделаться, пользователю ведь для своего удобства обязательно захочется полный набор стандартных функций (как в некоторых языках) для работы с датой.
    Последний раз редактировалось BETEP; 05.12.2010 в 18:58.

  7. #7

    По умолчанию

    а вот я умею признавать свои ошибки... прочитайте внимательно мой первый пост.
    Он был для Вас. На всякий случай подредактировал и выделил ключевую фразу красненьким.
    Остальные посты это ответы для drvlas и разжёвывание что такое константы.
    Последний раз редактировалось BETEP; 06.12.2010 в 09:38.

  8. #8

    По умолчанию

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

  9. #9

    По умолчанию

    в училище рассказали. Бауманском.
    Андрей, ну разве это не позитив?
    Последний раз редактировалось BETEP; 06.12.2010 в 11:03.

  10. #10

    По умолчанию

    Ну уже лучше, Вы задумались.
    про 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.

Страница 1 из 3 123 ПоследняяПоследняя

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •