|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
TDateTime учет региональных настроек
Здравствуйте!
У меня есть вопрос. Я сохраняю в ini файле время последней загрузки программы. в файл пишу с помощью функции datetimetostr. Работает это при региональных настройках России. Получается примерно так - 22.11.00 06.04.2011 (6 апреля 2011 года). Считываю дату StrToDateTime. При региональных настройках США месяц и день меняется местами и тогда получается при считывании даты неверное принятие программой времени (т.е. 4 июня 2011 года). Как обойти эту проблему. Так же в некоторых языках дата пишется в формате 06.04.2011 г. (т.е. с буквой в конце). Как это обойти при считывании даты, а то выдается сообщение об ошибке при считывании из ини файла, что это не формат datetime. Заранее спасибо. |
#2
|
||||
|
||||
А хранить дату-время в виде числа с плавающей точкой никак не вариант?
Оставайтесь хорошими людьми... VK id2634397, ds [at] phoenix [dot] dj |
#3
|
|||
|
|||
Цитата:
|
#4
|
||||
|
||||
Куда уж подробнее... TDateTime, если не ошибаюсь, является "наследником" то ли Real, то ли Double, это не суть. В INI это пишется WriteFloat, читается ReadFloat, напрямую и без преобразований. Сравнивать предельно просто - как любые другие числа. Вопрос в том, нужна ли "пользовательская" читабельность самого INI. Если нет - данный метод прекрасно подходит.
Оставайтесь хорошими людьми... VK id2634397, ds [at] phoenix [dot] dj |
#5
|
|||
|
|||
Пользователю не нужно в ини лезть. Мне главное что бы прога смогла понять из ини файла какой последнее время запуска было ну и вывести его в лайбл только в читабельном формате (учитывая региональные настройки). С этим способм это получится? (пока нет возможности проверить на делфи). Т.е. можно ли будет конвертировать данные из float в datetime?
|
#6
|
||||
|
||||
Так конвертировать ничего и не придётся - преобразований никаких не надо, так как TDateTime и является (в понимании Delphi) числом с плавающей точкой (тот самый Float). Я пользовался этим методом, и со 100% уверенностью говорю - метод работает.
Оставайтесь хорошими людьми... VK id2634397, ds [at] phoenix [dot] dj |
#7
|
|||
|
|||
Можете привести код преобразования из дататайма в флоат, а потом обратно? Еще мне нужно высчитать время которое прошло с момента закрытия программы (запись в ини) до ее запуска, т.е. получить на выходе следующее в лэйблах
- последнее время и дата выхода из программы - время и дата входа в программу - прошло времени между последними завершением и запуском программы |
#8
|
||||
|
||||
Так пишем:
Код:
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; Оставайтесь хорошими людьми... VK id2634397, ds [at] phoenix [dot] dj |
#9
|
|||
|
|||
спасибо. я попробую данный метод.
|
#10
|
||||
|
||||
Хотя, собственно говоря, если не таскать ini на флешке, то в пределах одного компьютера ReadDateTime/WriteDateTime тоже работают превосходно. Но для надёжности я чаще пользуюсь Float
Оставайтесь хорошими людьми... VK id2634397, ds [at] phoenix [dot] dj |
#11
|
|||
|
|||
В моем случае требуется возможность правильно определять время и разницу между ним в любых региональных настройках. Надеюсь способ предложенный Вами решит мою задачу.
|