Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Не получили письмо с кодом активации?

Официальный форум Simple-Scada.

Автор Тема: Время и дата  (Прочитано 12315 раз)

Teodor

  • Старожил
  • ****
  • Сообщений: 256
    • Просмотр профиля
Время и дата
« : 31 Марта 2017, 11:39:01 »
Есть пара вопросов по времени/дате

1. StrTodate как должна выглядеть строка, которую эта функция может корректно обработать.

2. SetDateFormat отвечает только за вывод, или от нее собсно зависит п.1

3. При SetDateFormat('dd.mm.yyyy');
S= DateToStr (date) = '27.03.2017', но StrToDate (S) = 31.03.2017 (не получилось).
Как правильно отработать строку в дату?
« Изменён: 16 Мая 2017, 14:15:22 от Simple-Scada »

Teodor

  • Старожил
  • ****
  • Сообщений: 256
    • Просмотр профиля
Re: время-дата
« Ответ #1 : 31 Марта 2017, 12:06:44 »
Вопрос снимается... Натупил, не ту переменную принимал в роли даты. Все ОК.

Teodor

  • Старожил
  • ****
  • Сообщений: 256
    • Просмотр профиля
Re: время-дата
« Ответ #2 : 31 Марта 2017, 12:25:08 »
Зато есть новый... После StrToDate  DateTime.AsInt64 возвращает число дней с 01.01.1900 ?

TeNQ

  • Постоялец
  • ***
  • Сообщений: 200
    • Просмотр профиля
Re: время-дата
« Ответ #3 : 31 Марта 2017, 14:50:32 »
У меня подобное было, когда я переменной типа DateTime присваивал явно время, а дату нет. Если дату не присвоить самому, то скадой присваивается по-умолчанию дата с каким то временным сдвигом относительно текущей даты. У меня был 1899 год месяц назад. А у вас сейчас 1900.

Simple-Scada

  • Администратор
  • *****
  • Сообщений: 3214
    • Просмотр профиля
    • Simple-Scada
Re: время-дата
« Ответ #4 : 31 Марта 2017, 14:55:06 »
Цитировать
DateTime.AsInt64 возвращает число дней с 01.01.1900?
Число дней с 30 декабря 1899 года.

Teodor

  • Старожил
  • ****
  • Сообщений: 256
    • Просмотр профиля
Re: время-дата
« Ответ #5 : 31 Марта 2017, 15:01:24 »
У меня подобное было, когда я переменной типа DateTime присваивал явно время, а дату нет. Если дату не присвоить самому, то скадой присваивается по-умолчанию дата с каким то временным сдвигом относительно текущей даты. У меня был 1899 год месяц назад. А у вас сейчас 1900.
;D
нене... мне был нужен абсолют даты (датавремя.AsLongWord). В линуховом формате я бы получил дикую цыфрь с точностью до мс, а тут всего "28 ххх" вот и засомневался. А что я получу если там еще и время будет указано?

Simple-Scada

  • Администратор
  • *****
  • Сообщений: 3214
    • Просмотр профиля
    • Simple-Scada
Re: время-дата
« Ответ #6 : 31 Марта 2017, 19:35:51 »
Цитировать
А что я получу если там еще и время будет указано?
Тип TDateTime это тип Double, вещественное число, всё что в его левой части (целая часть) представляет собой количество дней с 30 декабря 1899 года, а правая (дробная часть) представляет время. Соответственно при взятии "датавремя.AsLongWord" будет произведено округление вещественного числа до ближайшего целого и Вы получите также число дней, но округленное с учетом времени.


Teodor

  • Старожил
  • ****
  • Сообщений: 256
    • Просмотр профиля
Re: время-дата
« Ответ #7 : 10 Мая 2017, 12:30:30 »
Обидный момент с календарем...

Дату там выбрать можно, а вот время не нашел как ввести, кроме как с клавиатуры, которой на объекте нету :(.

Simple-Scada

  • Администратор
  • *****
  • Сообщений: 3214
    • Просмотр профиля
    • Simple-Scada
Re: время-дата
« Ответ #8 : 11 Мая 2017, 08:47:50 »
Здравствуйте.

В будущих обновлениях добавим виртуальную клавиатуру к вводу календаря.

Teodor

  • Старожил
  • ****
  • Сообщений: 256
    • Просмотр профиля
Re: время-дата
« Ответ #9 : 11 Мая 2017, 09:05:14 »
Здравствуйте.

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

Simple-Scada

  • Администратор
  • *****
  • Сообщений: 3214
    • Просмотр профиля
    • Simple-Scada
Re: время-дата
« Ответ #10 : 12 Мая 2017, 09:42:44 »
Цитировать
правда, если переменная инициализировалась в 0, то получается обидно, т.к. заманаешьсе щелкать
В последнем обновлении дата/время инициализируется началом сегодняшнего дня, это должно помочь.

Teodor

  • Старожил
  • ****
  • Сообщений: 256
    • Просмотр профиля
Re: время-дата
« Ответ #11 : 16 Мая 2017, 09:50:44 »
А нет возможности календарю добавить кнопку "Сегодня/Сейчас"? (При возможности)

Simple-Scada

  • Администратор
  • *****
  • Сообщений: 3214
    • Просмотр профиля
    • Simple-Scada
Re: время-дата
« Ответ #12 : 16 Мая 2017, 14:15:05 »
Для этого можно добавить кнопку рядом с календарем, связать доп. переменную этой кнопки с переменной календаря и на OnClick написать универсальный скрипт, который, при необходимости, подойдет и для других таких кнопок календарей:

Код
begin
  if Sender is TM_Object then
    with Sender as TM_Object do
      if VariableEx <> nil then
        VariableEx.Value := Now;
end.
« Изменён: 16 Мая 2017, 14:46:27 от Simple-Scada »

Teodor

  • Старожил
  • ****
  • Сообщений: 256
    • Просмотр профиля
Re: Время и дата
« Ответ #13 : 17 Мая 2017, 12:56:47 »
Таки, да...  Костенею...  Идея зачетная... А заодно и кнопки "сегодня", "завтра", "через час", "завтрак", "обед", "ужин"...

Спасибо за идею :)