Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 08.04.2011, 14:32   #1
celovec
Форумчанин
 
Регистрация: 15.06.2007
Сообщений: 182
По умолчанию Работа с временем.

Подскажите в Delphi есть какие-то компоненты упрощающие работу с временем.

Тоесть у меня в переменной есть такой текст: Fri, 08 Apr 2011 12:25:40
Необходимо из него сделать это: 08/04/2011 12:25

Часы, минуты по сути я могу вырезать. А как быть с месяцем? Нужно делать какой-то цикл который будет перебирать все месяца и ставить им нужную цифру или как все это лучше реализовать?

Последний раз редактировалось celovec; 08.04.2011 в 14:34.
celovec вне форума Ответить с цитированием
Старый 08.04.2011, 14:50   #2
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,426
По умолчанию

DateUtils смотри.
Человек_Борща вне форума Ответить с цитированием
Старый 08.04.2011, 14:55   #3
GunSmoker
Старожил
 
Регистрация: 13.08.2009
Сообщений: 2,581
По умолчанию

Не ясно, Apr - это при любом раскладе Apr? А если у меня винда русская - может там Апр будет? Или откуда это получается - из SQL? Может ли там быть Апр?

От этого надо начинать, а не от того, что там в Delphi есть.
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.
GunSmoker вне форума Ответить с цитированием
Старый 08.04.2011, 14:56   #4
celovec
Форумчанин
 
Регистрация: 15.06.2007
Сообщений: 182
По умолчанию

Можно пример? Сейчас искал исходники, ничего подходящего для себя к сожалению не нашел.

GunSmoker, эта строка с RSS ленты. Apr - это при любом раскладе.

Последний раз редактировалось celovec; 08.04.2011 в 15:01.
celovec вне форума Ответить с цитированием
Старый 08.04.2011, 15:50   #5
GunSmoker
Старожил
 
Регистрация: 13.08.2009
Сообщений: 2,581
По умолчанию

На Delphi XE я бы сделал так:

Код:
procedure TForm1.Button1Click(Sender: TObject);

  // 'Tue, 03 Jun 2003 09:39:21' -> local TDateTime
  function RSSDateTimeToDateTime(const ADateTime: String): TDateTime;

    // 'Tue, 03 Jun 2003 09:39:21' -> '03/06/2003 09:39:21'
    function RSSDateTimeToShortDateTime(const ADateTime: String; var AFormatSettings: TFormatSettings): String;

      function IntToStrPad(const AInt, APadding: Integer): String;
      begin
        Result := IntToStr(AInt);
        if Length(Result) < APadding then
          Result := StringOfChar('0', APadding - Length(Result)) + Result;
      end;

    var
      X: Integer;
    begin
      AFormatSettings.ShortDateFormat := 'dd/mm/yyyy';
      AFormatSettings.ShortTimeFormat := 'hh:mm:ss';

      X := Pos(',', ADateTime);
      if X > 0 then
        Result := Trim(Copy(ADateTime, X + 1, MaxInt))
      else
        Result := Trim(ADateTime);

      for X := Low(AFormatSettings.ShortMonthNames) to High(AFormatSettings.ShortMonthNames) do
        Result := StringReplace(Result, ' ' + AFormatSettings.ShortMonthNames[X] + ' ',
                                        AFormatSettings.DateSeparator + IntToStrPad(X, 2) + AFormatSettings.DateSeparator, [rfIgnoreCase]);
    end;

  var
    FS: TFormatSettings;
    DateTime: String;
  begin
    GetLocaleFormatSettings($0409, FS);
    DateTime := RSSDateTimeToShortDateTime(ADateTime, FS);
    Result := StrToDateTime(DateTime, FS);
    // TODO: GMT to local?
  end;

var
  S: String;
  DT: TDateTime;
begin
  S := 'Tue, 03 Jun 2003 09:39:21';

  DT := RSSDateTimeToDateTime(S);

  Caption := DateTimeToStr(DT);
end;
Смысл в том, что в Delphi StrToDateTime работает только с short форматом строки - т.е. таким, который три компонента (числа) разделены DateSeparator-ом. Поэтому я сначала перевёл строку в ShortDateFormat (функция RSSDateTimeToShortDateTime), а затем - строку в TDateTime (обычным вызовом StrToDateTime).

Можно было сделать и по-другому - не использовать StrToDateTime, а ручками распарсить строку.
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.

Последний раз редактировалось GunSmoker; 08.04.2011 в 16:04.
GunSmoker вне форума Ответить с цитированием
Старый 08.04.2011, 15:59   #6
celovec
Форумчанин
 
Регистрация: 15.06.2007
Сообщений: 182
По умолчанию

Огого. Спасибо конечно, наверняка поможет в будущем. Но в моем случае компактней и лучше будет разбить строчку допустим опираясь на пробелы и далее просто немного поработать с циклов в месяце.
celovec вне форума Ответить с цитированием
Старый 08.04.2011, 18:28   #7
Dangerous*
Новичок
Джуниор
 
Регистрация: 08.04.2011
Сообщений: 2
По умолчанию

Здравствуйте! подскажите пожалуйста в Delphi можно сделать так чтобы программа рассчитывала время например тестирования.....т.е. в программе у меня задание и варианты ответов.....мне нужно время за которое пользователь ответит на поставленный вопрос
Dangerous* вне форума Ответить с цитированием
Старый 08.04.2011, 18:29   #8
Dangerous*
Новичок
Джуниор
 
Регистрация: 08.04.2011
Сообщений: 2
По умолчанию

и как эт сделать если эт возможно? заранее спасибо!
Dangerous* вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
работа со временем серг Общие вопросы C/C++ 9 07.12.2010 21:03
Работа со временем A_Orlov Паскаль, Turbo Pascal, PascalABC.NET 1 27.04.2010 16:38
Работа со временем в C++ +As+ Помощь студентам 1 02.09.2008 21:17
Работа со временем. ekzi Общие вопросы C/C++ 1 22.07.2008 15:29
Работа со временем joker Общие вопросы Delphi 4 20.04.2008 15:01