Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 27.11.2009, 11:10
AntoNechayuk AntoNechayuk вне форума
Новичок
 
Регистрация: 23.11.2009
Сообщения: 58
Репутация: 10
Печаль определить является ли дата датой

Дано: строковая переменная.
Задача: определить является ли она датой формата TDateTime
Ответить с цитированием
  #2  
Старый 27.11.2009, 12:00
Аватар для NIch
NIch NIch вне форума
Продвинутый
 
Регистрация: 02.06.2008
Адрес: Бендеры ПМР
Сообщения: 754
Репутация: 2446
По умолчанию

Теория...
DateTime в делфи это число в формате LongDouble...
Целая часть элемента данных типа TDateTime соответствует количеству дней, прошедших с полночи 30 декабря 1899 года. Дробная часть элемента данных типа TDateTime соответствует времени дня.
Следующие примеры поясняют сказанное:
Значение.....Дата...........Время
0.............30.12.1899....00:00:00
0.5..........30.12.1899....12:00:00
1.5..........31.12.1899....12:00:00
-1.25.......29.12.1899....06:00:00
35431.0....01.01.1997....00:00:00
__________________
В начале был Бит, потом Байт и только потом появилось Слово...

Последний раз редактировалось NIch, 27.11.2009 в 12:03.
Ответить с цитированием
  #3  
Старый 27.11.2009, 12:06
Phedor Phedor вне форума
Начинающий
 
Регистрация: 28.02.2008
Сообщения: 118
Репутация: 21
По умолчанию

Пример NIch-а не пройдет, т.к. значение longВщгиду можно записать любое, но это не значит что при преобразовании получим правильную дату.
Простейший способ

Код:
var
  d: TDateTime;
  s: string;
...
try
  d := StrToDateTime(s);
except
  Application.MessageBox('Введенная дата не корректна. Повторите ввод', 'Ошибочка', MB_OK or MB_ICONWARNING);
end;
...
Ответить с цитированием
  #4  
Старый 27.11.2009, 12:06
Asinkrit Asinkrit вне форума
Местный
 
Регистрация: 29.10.2009
Сообщения: 446
Репутация: 271
По умолчанию

Цитата:
Сообщение от AntoNechayuk
Дано: строковая переменная.
Задача: определить является ли она датой формата TDateTime

Код:
function IsDateTime(const S:String):boolean;
var
  zDate:TDateTime;
begin
  Result:=TryStrToDateTime(S, zDate);
end;
Ответить с цитированием
  #5  
Старый 27.11.2009, 12:35
AntoNechayuk AntoNechayuk вне форума
Новичок
 
Регистрация: 23.11.2009
Сообщения: 58
Репутация: 10
По умолчанию

всем спасибо.
С try\exept работает лучше всего.
Значит пусть так и будет.
Ответить с цитированием
  #6  
Старый 27.11.2009, 16:06
Asinkrit Asinkrit вне форума
Местный
 
Регистрация: 29.10.2009
Сообщения: 446
Репутация: 271
По умолчанию

Цитата:
Сообщение от AntoNechayuk
всем спасибо.
С try\exept работает лучше всего.
Значит пусть так и будет.

Функция TryStrToDateTime взята из StrToDateTime и блок try/except в данном случае бесмысленен)
Ответить с цитированием
  #7  
Старый 27.11.2009, 16:06
Asinkrit Asinkrit вне форума
Местный
 
Регистрация: 29.10.2009
Сообщения: 446
Репутация: 271
По умолчанию

Цитата:
Сообщение от AntoNechayuk
всем спасибо.
С try\exept работает лучше всего.
Значит пусть так и будет.

Функция TryStrToDateTime взята из StrToDateTime и блок try/except в данном случае бесмысленен)
Ответить с цитированием
  #8  
Старый 27.11.2009, 16:29
Аватар для NIch
NIch NIch вне форума
Продвинутый
 
Регистрация: 02.06.2008
Адрес: Бендеры ПМР
Сообщения: 754
Репутация: 2446
По умолчанию

Цитата:
Пример NIch-а не пройдет, т.к. значение LongDouble можно записать любое, но это не значит что при преобразовании получим правильную дату.
Поправлю, я не приводил пример определения даты, а всего лишь добавил немного теории...так для общего образования)))
__________________
В начале был Бит, потом Байт и только потом появилось Слово...
Ответить с цитированием
  #9  
Старый 30.11.2009, 09:38
AntoNechayuk AntoNechayuk вне форума
Новичок
 
Регистрация: 23.11.2009
Сообщения: 58
Репутация: 10
По умолчанию

Цитата:
Функция TryStrToDateTime взята из StrToDateTime и блок try/except в данном случае бесмысленен)

мне нужна ошибка данного действия
Ответить с цитированием
  #10  
Старый 30.11.2009, 09:40
AntoNechayuk AntoNechayuk вне форума
Новичок
 
Регистрация: 23.11.2009
Сообщения: 58
Репутация: 10
По умолчанию

народ! есть вопрос:
1. Можно ли вытянуть дату из BIOS? Если да то как?
2. Ходят слухи, что можно прописать в материнку какое-то значение. Мне необходимо хотя бы флаг зашить. Это возможно? и КАК????
Ответить с цитированием
  #11  
Старый 30.11.2009, 23:50
Asinkrit Asinkrit вне форума
Местный
 
Регистрация: 29.10.2009
Сообщения: 446
Репутация: 271
По умолчанию

Цитата:
Сообщение от AntoNechayuk
мне нужна ошибка данного действия
Ну и в чем проблема?)
Код:
  if not IsDateTime('10.10.2010 07:00:00') then 
    ShowMessage('Внимание: введенная строка не является датой!');
Ответить с цитированием
  #12  
Старый 28.01.2010, 22:03
riaman riaman вне форума
Прохожий
 
Регистрация: 28.01.2010
Сообщения: 4
Репутация: 10
По умолчанию

Код HTML:
С try\exept работает лучше всего.
Лучше не добовлять в спрограмму исключения, когда можно эту ошибку отлофить без фатальных ошибок... Хороший тон программирования + надежность программы.
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

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

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 06:45.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter