Модераторы: Poseidon, Snowy, bems, MetalFan

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Работа с датами и временем, как? 
V
    Опции темы
former
  Дата 29.11.2006, 20:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


MEMS Expert
***


Профиль
Группа: Завсегдатай
Сообщений: 1166
Регистрация: 1.3.2006
Где: Россия

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



Всем привет! Суть вопроса такова: есть файл в котором храняться две переменные типа string (Дата: дд.мм.гггг; Время: чч:мм:сс), полученные путём преобразования текущей даты и времени (но только в прошлом). Нужно сравнить эти дату и время с датой и временем, хранящимися в таблице БД в полях Date и Time (Дата: дд.мм.гггг; Время: чч:мм:сс), соответственно. Как это сделать? smile 


--------------------
Достаточно снизить уровень мышления, чтобы иные почувствовали почву под ногами.
PM MAIL   Вверх
Romikgy
Дата 29.11.2006, 20:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Любитель-программер
****


Профиль
Группа: Участник Клуба
Сообщений: 7326
Регистрация: 11.5.2005
Где: Porto Franco Odes sa

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



StrToDateTime
а потом время сравнивай


--------------------
Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. 
smile

PM   Вверх
Snowy
Дата 29.11.2006, 20:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

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



Перевести в строку дату: http://forum.vingrad.ru/index.php?showtopic=122171
Разница получается простым вычитанием.
PM MAIL   Вверх
former
Дата 29.11.2006, 20:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


MEMS Expert
***


Профиль
Группа: Завсегдатай
Сообщений: 1166
Регистрация: 1.3.2006
Где: Россия

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



Сделал вот так:

Код

procedure TForm1.Button1Click(Sender: TObject);
var D1,D2:TDateTime;
    S1,S2,S3:string;
begin
  S1:='07.07.2006';
  S2:='07.08.2006';
  D1:=StrToDateTime(S1);
  D2:=StrToDateTime(S2);
  ShowMessage(DateToStr(D2-D1));
end;


В резуль тате получил: 30.01.1900, а мне нужно узнать D2 позже D1 или такое же. И тоже самое со временем.

Добавлено @ 20:47 
Как, например, это происходит с датой и времнем создания файла.


--------------------
Достаточно снизить уровень мышления, чтобы иные почувствовали почву под ногами.
PM MAIL   Вверх
Snowy
Дата 29.11.2006, 20:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

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



Код

  if D2 > D1 then
    ShowMessage(FloatToStr(D2-D1))


Добавлено @ 20:51 
не нужно результат переводить из даты в строку - это число в днях smile
PM MAIL   Вверх
former
Дата 29.11.2006, 21:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


MEMS Expert
***


Профиль
Группа: Завсегдатай
Сообщений: 1166
Регистрация: 1.3.2006
Где: Россия

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



Попытался тоже самое сделать со времнем не получилось.  smile 

Код

procedure TForm1.Button1Click(Sender: TObject);
var D1,D2:TDateTime;
    S1,S2,S3:string;
begin
  S1:='08:30:00';
  S2:='20:30:00';
  D1:=StrToDateTime(S1);
  D2:=StrToDateTime(S2);
   if D2 > D1 then
    ShowMessage(FloatToStr(D2-D1));
end;



--------------------
Достаточно снизить уровень мышления, чтобы иные почувствовали почву под ногами.
PM MAIL   Вверх
Romikgy
Дата 29.11.2006, 21:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Любитель-программер
****


Профиль
Группа: Участник Клуба
Сообщений: 7326
Регистрация: 11.5.2005
Где: Porto Franco Odes sa

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



DaysBetween
MinutesBetween

Это сообщение отредактировал(а) Romikgy - 29.11.2006, 21:04


--------------------
Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. 
smile

PM   Вверх
former
Дата 29.11.2006, 21:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


MEMS Expert
***


Профиль
Группа: Завсегдатай
Сообщений: 1166
Регистрация: 1.3.2006
Где: Россия

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



Хорошо. А если в таблице БД в поле DateTime хранится дата и время в виде 'дд.мм.гггг чч.мм.сс', а в файле в аналогичном виде но тип string?


--------------------
Достаточно снизить уровень мышления, чтобы иные почувствовали почву под ногами.
PM MAIL   Вверх
Romikgy
Дата 29.11.2006, 21:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Любитель-программер
****


Профиль
Группа: Участник Клуба
Сообщений: 7326
Регистрация: 11.5.2005
Где: Porto Franco Odes sa

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



и что из этого


--------------------
Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. 
smile

PM   Вверх
former
Дата 29.11.2006, 21:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


MEMS Expert
***


Профиль
Группа: Завсегдатай
Сообщений: 1166
Регистрация: 1.3.2006
Где: Россия

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



1) Получается нужно разбирать 'дд.мм.гггг чч.мм.сс' на ''дд.мм.гггг' и 'чч.мм.сс'. Как?

2) MinutesBetween работает с временем в AM и PM. Как тогда преобразовать 'чч.мм.сс'?


--------------------
Достаточно снизить уровень мышления, чтобы иные почувствовали почву под ногами.
PM MAIL   Вверх
Romikgy
Дата 29.11.2006, 22:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Любитель-программер
****


Профиль
Группа: Участник Клуба
Сообщений: 7326
Регистрация: 11.5.2005
Где: Porto Franco Odes sa

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



Цитата(former @  29.11.2006,  20:01 Найти цитируемый пост)
StrToDateTime


Цитата(former @  29.11.2006,  20:35 Найти цитируемый пост)
Получается нужно разбирать 'дд.мм.гггг чч.мм.сс' на ''дд.мм.гггг' и 'чч.мм.сс'. Как?

разве не работает?

Цитата(former @  29.11.2006,  20:35 Найти цитируемый пост)
MinutesBetween работает с временем в AM и PM. Как тогда преобразовать 'чч.мм.сс'? 

MilliSecondsBetween
бери это и добивайся от него минут smile


--------------------
Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. 
smile

PM   Вверх
Snowy
Дата 29.11.2006, 23:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

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



Я в самом начале дал линк на топ, где рассматривается преобрасование строки с датой и временем в TDateTime.
Тебе всего лишь нужно заменить формат.
Что ещё не понятно.
Вся информация дана.
Преобразование - есть.
Сравнение есть.
Что ещё нужно?
Преобразовать пример под твой формат?
Так он неясен.

Добавлено @ 23:04 
Цитата(former @  29.11.2006,  21:35 Найти цитируемый пост)
MinutesBetween работает с временем в AM и PM. Как тогда преобразовать 'чч.мм.сс'?
Оно работает с TDateTime, а не AM/PM.
Но, как я уже сказал, разница - простое вычитание.
Вычитаешь из большей даты меньшую - получаешь разницу в днях.
Я не пойму - в чем ещё вопрос?
Всего 2 этапа.
1. Из строки получить TDateTime.
2. Вычксть - получить разницу в днях.
В чём трудности?
PM MAIL   Вверх
Snowy
Дата 29.11.2006, 23:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

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



Вот живой пример:
Код

function StringToDateTime(s: string): TDateTime;
var
  i: integer;
begin
  i := pos(#32, s); if i = 0 then i := Length(s)+1;
  result := StrToDateDef(copy(s, 1, i-1), 0) +
            StrToTimeDef(copy(s, i+1, Length(s)), 0);
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  r: TDateTime;
begin
  r := StringToDateTime('22.11.2006 12:23:05') -
       StringToDateTime('11.08.2006 09:42:54');
  ShowMessage('Разница в днях: ' + FloatToStr(r));
end;
Ещё вопросы?
PM MAIL   Вверх
former
Дата 30.11.2006, 17:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


MEMS Expert
***


Профиль
Группа: Завсегдатай
Сообщений: 1166
Регистрация: 1.3.2006
Где: Россия

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



Snowy, спасибо за исчерпывающий ответ. Это то, что нужно. smile  smile  smile 


--------------------
Достаточно снизить уровень мышления, чтобы иные почувствовали почву под ногами.
PM MAIL   Вверх
mitnick
Дата 16.5.2008, 08:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Уважаемые!
Извиняюсь конечно за оффтоп

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

вот что я примерно делал

Код

decodedate(date_begin.date, Year_Begin, Month_Begin, Day_Begin);
decodedate(date_end.date, Year_End, Month_End, Day_End);

Result_Year :=  Year_End - Year_Begin;

if  Month_End < Month_Begin then begin 
Result_Month := Month_Begin - Month_End;
end else begin
Result_Month := Month_End - Month_Begin;
end;

if  Day_End < Day_Begin then begin 
Result_Day :=  Day_Begin - Day_End;
end else begin
Result_Day :=  Day_End - Day_Begin;


с точки зрения математики одно из другого вычитается но суть в том что, считает в итоге не правильно
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

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

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

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

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


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

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


 




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


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

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