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

Delphi Sources



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

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 07.04.2011, 00:15
DNew DNew вне форума
Прохожий
 
Регистрация: 07.04.2011
Сообщения: 6
Репутация: 10
По умолчанию TDateTime учет региональных настроек

Здравствуйте!
У меня есть вопрос. Я сохраняю в ini файле время последней загрузки программы. в файл пишу с помощью функции datetimetostr. Работает это при региональных настройках России. Получается примерно так - 22.11.00 06.04.2011 (6 апреля 2011 года). Считываю дату StrToDateTime.
При региональных настройках США месяц и день меняется местами и тогда получается при считывании даты неверное принятие программой времени (т.е. 4 июня 2011 года). Как обойти эту проблему. Так же в некоторых языках дата пишется в формате 06.04.2011 г. (т.е. с буквой в конце). Как это обойти при считывании даты, а то выдается сообщение об ошибке при считывании из ини файла, что это не формат datetime.
Заранее спасибо.
Ответить с цитированием
  #2  
Старый 07.04.2011, 00:25
Аватар для PhoeniX
PhoeniX PhoeniX вне форума
Always hardcore!
 
Регистрация: 04.03.2009
Адрес: СПб
Сообщения: 3,239
Версия Delphi: GCC/FPC/FASM
Репутация: 62149
По умолчанию

А хранить дату-время в виде числа с плавающей точкой никак не вариант?
__________________
Оставайтесь хорошими людьми...
VK id2634397, ds [at] phoenix [dot] dj
Ответить с цитированием
  #3  
Старый 07.04.2011, 00:27
DNew DNew вне форума
Прохожий
 
Регистрация: 07.04.2011
Сообщения: 6
Репутация: 10
По умолчанию

Цитата:
Сообщение от DJ PhoeniX
А хранить дату-время в виде числа с плавающей точкой никак не вариант?
А можно подробнее? И как потом сравнивать?
Ответить с цитированием
  #4  
Старый 07.04.2011, 00:31
Аватар для PhoeniX
PhoeniX PhoeniX вне форума
Always hardcore!
 
Регистрация: 04.03.2009
Адрес: СПб
Сообщения: 3,239
Версия Delphi: GCC/FPC/FASM
Репутация: 62149
По умолчанию

Куда уж подробнее... TDateTime, если не ошибаюсь, является "наследником" то ли Real, то ли Double, это не суть. В INI это пишется WriteFloat, читается ReadFloat, напрямую и без преобразований. Сравнивать предельно просто - как любые другие числа. Вопрос в том, нужна ли "пользовательская" читабельность самого INI. Если нет - данный метод прекрасно подходит.
__________________
Оставайтесь хорошими людьми...
VK id2634397, ds [at] phoenix [dot] dj
Ответить с цитированием
  #5  
Старый 07.04.2011, 00:36
DNew DNew вне форума
Прохожий
 
Регистрация: 07.04.2011
Сообщения: 6
Репутация: 10
По умолчанию

Пользователю не нужно в ини лезть. Мне главное что бы прога смогла понять из ини файла какой последнее время запуска было ну и вывести его в лайбл только в читабельном формате (учитывая региональные настройки). С этим способм это получится? (пока нет возможности проверить на делфи). Т.е. можно ли будет конвертировать данные из float в datetime?
Ответить с цитированием
  #6  
Старый 07.04.2011, 00:38
Аватар для PhoeniX
PhoeniX PhoeniX вне форума
Always hardcore!
 
Регистрация: 04.03.2009
Адрес: СПб
Сообщения: 3,239
Версия Delphi: GCC/FPC/FASM
Репутация: 62149
По умолчанию

Так конвертировать ничего и не придётся - преобразований никаких не надо, так как TDateTime и является (в понимании Delphi) числом с плавающей точкой (тот самый Float). Я пользовался этим методом, и со 100% уверенностью говорю - метод работает.
__________________
Оставайтесь хорошими людьми...
VK id2634397, ds [at] phoenix [dot] dj
Ответить с цитированием
  #7  
Старый 07.04.2011, 00:45
DNew DNew вне форума
Прохожий
 
Регистрация: 07.04.2011
Сообщения: 6
Репутация: 10
По умолчанию

Можете привести код преобразования из дататайма в флоат, а потом обратно? Еще мне нужно высчитать время которое прошло с момента закрытия программы (запись в ини) до ее запуска, т.е. получить на выходе следующее в лэйблах
- последнее время и дата выхода из программы
- время и дата входа в программу
- прошло времени между последними завершением и запуском программы
Ответить с цитированием
  #8  
Старый 07.04.2011, 00:52
Аватар для PhoeniX
PhoeniX PhoeniX вне форума
Always hardcore!
 
Регистрация: 04.03.2009
Адрес: СПб
Сообщения: 3,239
Версия Delphi: GCC/FPC/FASM
Репутация: 62149
По умолчанию

Так пишем:
Код:
var
  ini: TIniFile;
  datetime: TDateTime;
begin
  ini:=TIniFile.Create('c:/test.ini');
  datetime:=now;
  ini.WriteDateTime('Test','DateTime',datetime); // для сравнения
  ini.WriteFloat('Test','Float',datetime);
end;
Как читать, думаю, догадаетесь. А для получения разницы - с TDateTime прекрасно работают все математические операторы, в том числе ВЫЧИТАНИЕ.
__________________
Оставайтесь хорошими людьми...
VK id2634397, ds [at] phoenix [dot] dj
Ответить с цитированием
  #9  
Старый 07.04.2011, 00:54
DNew DNew вне форума
Прохожий
 
Регистрация: 07.04.2011
Сообщения: 6
Репутация: 10
По умолчанию

спасибо. я попробую данный метод.
Ответить с цитированием
  #10  
Старый 07.04.2011, 00:54
Аватар для PhoeniX
PhoeniX PhoeniX вне форума
Always hardcore!
 
Регистрация: 04.03.2009
Адрес: СПб
Сообщения: 3,239
Версия Delphi: GCC/FPC/FASM
Репутация: 62149
По умолчанию

Хотя, собственно говоря, если не таскать ini на флешке, то в пределах одного компьютера ReadDateTime/WriteDateTime тоже работают превосходно. Но для надёжности я чаще пользуюсь Float
__________________
Оставайтесь хорошими людьми...
VK id2634397, ds [at] phoenix [dot] dj
Ответить с цитированием
  #11  
Старый 07.04.2011, 00:59
DNew DNew вне форума
Прохожий
 
Регистрация: 07.04.2011
Сообщения: 6
Репутация: 10
По умолчанию

В моем случае требуется возможность правильно определять время и разницу между ним в любых региональных настройках. Надеюсь способ предложенный Вами решит мою задачу.
Ответить с цитированием
Ответ


Delphi Sources

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

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

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

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


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


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

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

ВКонтакте   Facebook   Twitter