Поиск:

Ответ в темуСоздание новой темы Создание опроса
> TDateTime, переход через полночь 
V
    Опции темы
Aline
Дата 26.6.2009, 15:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 470
Регистрация: 22.7.2005
Где: Таруса

Репутация: нет
Всего: нет



Есть переменная типа TDateTime, которая содержит дату и время создания файла. Есть необходимость увеличить время на 1ч. Как правильно это сделать? И изменится ли автоматически дата, если допустим время создания 23:05:00, т.е. если прибавляем 1ч, то будут уже следующие сутки?
А ещё может же быть переход на следующий месяц и следующий год... Неужели всё надо вручную отслеживать?

Это сообщение отредактировал(а) Aline - 26.6.2009, 15:29
PM MAIL   Вверх
JackyFox
Дата 26.6.2009, 15:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 210
Регистрация: 21.11.2007

Репутация: нет
Всего: 7



Всё будет в порядке, товарищ.
Отсчет времени в TDateTime ведется в миллисекундах от 30 декабря 1899 года.
--------------------
У вас менее 250 сообщений, ссылки отключены
PM   Вверх
Aline
Дата 26.6.2009, 16:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 470
Регистрация: 22.7.2005
Где: Таруса

Репутация: нет
Всего: нет



Прокоментируйте, плиз такой код и его результат:
Код

   t = EncodeDate(2009,6,30);                        //устанавливаю дату 30.06.2009
   Memo1->Lines->Add(DateTimeToStr(t));     

   t = EncodeTime(23, 1, 1, 1);                        //устанавливаю время 23:01:01.1
   Memo1->Lines->Add(DateTimeToStr(t));

   t += 1.0 / 24;                                              //увеличиваю на 1ч
   Memo1->Lines->Add(DateTimeToStr(t));


в результате в Memo получаю соответственно:

30.06.2009
30.12.1899 23:01:01
31.12.1899 0:01:01


Почему год остался 1899 имесяц декабрь?
PM MAIL   Вверх
JackyFox
Дата 26.6.2009, 16:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 210
Регистрация: 21.11.2007

Репутация: нет
Всего: 7



TDateTime вообще-то типа double. Целая часть - количество дней, прошедших с 30.12.1899, дробная - время дня.
Во второй строчке ты не указал целую часть, следовательно, получил 0 целых, т.е. 30.12.1899. Потом прибавил час и получил 31 число

Добавлено @ 16:08
Видимо, следует делать так:

Код

t = EncodeDate(yyyy,m,d) + EncodeTime(h, m, s, ms);


Это сообщение отредактировал(а) JackyFox - 26.6.2009, 16:09
--------------------
У вас менее 250 сообщений, ссылки отключены
PM   Вверх
Aline
Дата 26.6.2009, 16:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 470
Регистрация: 22.7.2005
Где: Таруса

Репутация: нет
Всего: нет



JackyFox,  явообще женского пола, ты не заметил? smile
Поэтому лучше писать "не указала"...

А за помощь спасибо, сейчас попробую
PM MAIL   Вверх
JackyFox
Дата 26.6.2009, 16:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 210
Регистрация: 21.11.2007

Репутация: нет
Всего: 7



Aline, извините, извините, увлекся программированием smile
--------------------
У вас менее 250 сообщений, ссылки отключены
PM   Вверх
Aline
Дата 26.6.2009, 16:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 470
Регистрация: 22.7.2005
Где: Таруса

Репутация: нет
Всего: нет



JackyFox, бывает smile
Вот такие вы все программисты-мужчины smile

Ладно, отвлеклась от темы.

Действительно, вариант 

Код

   t = EncodeDate(2009,6,30) + EncodeTime(23, 1, 1, 1);
   Memo1->Lines->Add(DateTimeToStr(t));

   t += 1.0 / 24;
   Memo1->Lines->Add(DateTimeToStr(t));


Работает правильно. Спасибо ещё раз.

На самом деле это я просто убеждалась, что действительно если прибавить 1ч, то будет всё в порядке.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++ Builder"
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по С++ Builder обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Настоятельно рекомендуем заглянуть в DRKB (Delphi Russian Knowledge Base) - крупнейший в рунете сборник материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C++ Builder | Следующая тема »


 




[ Время генерации скрипта: 0.0554 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.