Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Нестабильно работет StrToDateTime() [D2005]


Страницы:   1 2 3

sdfdh ©   (2014-04-10 20:49:00) 

Здравствуйте!
Необходимо кодировать текст в дату. Использую следующий код:

procedure TForm1.Button1Click(Sender: TObject);
Var
StrDate : string;
Fmt     : TFormatSettings;
dt      : TDateTime;
begin
fmt.ShortDateFormat:='dd.mm.yyyy';
fmt.DateSeparator  :='.';
StrDate:='02.04.2014';
dt:=StrToDateTime(StrDate,Fmt);

end;


Переменной dt присваивается 02.04.2014

Однако, если я тот же код!!! Один в один, вставляю в свое приложение, то этот же код уже не работает. dt=30.12.1899

В чем проблема? Что не так?


sdfdh   (2014-04-11 07:02:00) [21]

To brother

Спасибо! Вот именно этот код заработал!
Не знаю, с чем это связано, но он возвращает то, что нужно 02.04.2014

Еще раз спасибо!


brother   (2014-04-11 06:57:00) [22]

зы. button135 O_o ! Однако хорошая программа ;)


brother   (2014-04-11 06:53:00) [23]

procedure TForm1.Button1Click(Sender: TObject);
Var
 StrDate : string;
 Fmt     : TFormatSettings;
 dt      : TDateTime;
begin
 fmt.ShortDateFormat:='dd.mm.yyyy';
 fmt.DateSeparator  :='.';
 StrDate:='02.04.2014';
 dt:= 0;
try
 dt:=StrToDateTime(StrDate,Fmt);
except
 on E : Exception do
   Showmessage(e.Message);
end;
 showmessage(DateTimeToStr(dt));
end;


вот так попробуйте...


brother   (2014-04-11 06:46:00) [24]

> Рекордам Коран запрещает иметь Create?

запрещает не коран, а версия делфи, например д7 и ниже не имеют этого...


MonoLife   (2014-04-11 06:00:00) [25]

а, пардон, там 2-я же функция есть с параметром форматирования


MonoLife   (2014-04-11 05:55:00) [26]

StrToDate(), а там второй параметр нужен что ли?
StrDate:='02.04.2014';
dt:=StrToDateTime(StrDate);


Sapersky   (2014-04-10 23:43:00) [27]

Переменная на стеке, в таймсепараторе и прочих явно не заполняемых полях случайный мусор.
Так что да, Create, либо в старых версиях GetLocaleFormatSettings.


SergeyIT   (2014-04-10 23:21:00) [28]

А может таймсепаратор тоже равен '.'  и крыша съезжает


Inovet   (2014-04-10 23:11:00) [29]

> [12] antonn ©   (10.04.14 23:02)
> локаль

Вот и надо выяснить. Приложение запускается там же, где и тестовый пример?


Inovet   (2014-04-10 23:07:00) [30]

> [11] junglecat   (10.04.14 22:54)
> Create? у record?

Рекордам Коран запрещает иметь Create?


antonn   (2014-04-10 23:02:00) [31]


>
> Имхо врешь. Или честно заблуждаешься.

локаль


junglecat   (2014-04-10 22:54:00) [32]

Create? у record?


Inovet   (2014-04-10 22:44:00) [33]

А если добавить
TFormatSettings.Create
перед заданием форматов?


sdfdh   (2014-04-10 22:16:00) [34]

StrToDate - тот же эффект (т.е. никакой)


junglecat   (2014-04-10 22:07:00) [35]

а почему не StrToDate, если время не нужно?


sdfdh   (2014-04-10 21:35:00) [36]

Создал новую переменную с именем, которого ТОЧНО в приложении нет.
Та же фигня:
http://s1.ipicture.ru/uploads/20140410/GsS45WZy.jpg


sdfdh   (2014-04-10 21:33:00) [37]

Коллеги, всем спасибо кто ответил!
Вот Скрин из моего приложения, который показывает, что я не вру и не ошибаюсь с переменными:
http://s1.ipicture.ru/uploads/20140410/OUWsouWR.jpg


Германн   (2014-04-10 21:25:00) [38]

Предположу что в программе есть две переменные dt.


Германн   (2014-04-10 21:07:00) [39]


> если я тот же код!!! Один в один

Имхо врешь. Или честно заблуждаешься.


MBo   (2014-04-10 21:07:00) [40]

На всякий случай - 30.12.1899 означает, что в данной переменной записан (или остался) 0


Страницы:   1 2 3

Наверх

Титульная страница Поиск, карта сайта Написать письмо