AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

RFC -> TDateTime -> RFC

Ein Thema von sakura · begonnen am 5. Jul 2003
Antwort Antwort
Benutzerbild von sakura
sakura

Registriert seit: 10. Jun 2002
Ort: München
11.412 Beiträge
 
Delphi 11 Alexandria
 
#1

RFC -> TDateTime -> RFC

  Alt 5. Jul 2003, 12:03
Folgende Funktionen wandeln einen Datumswert in das international gültige RFC Format um und auch wieder zurück. Dieses Datumsformat ist z.B. im Umgang mit den meisten DB zu empfehlen, um mögliche Probleme mit den lokalen Einstellungen an einem Rechner zu umgehen.

Delphi-Quellcode:
function DateTimeToRFCA(Value, Offset: TDateTime): AnsiString;
const
  cWeekday: array[1..7] of AnsiString = (
    'Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'
  );
  cMonth: array[1..12] of AnsiString = (
    'Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun',
    'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'
  );
var
  TimeDifference: Integer;
  Dummy, Year, Month, Day, Hour, Minute, Second: Word;
  Zone: AnsiString;
begin
  // determine time by difference
  TimeDifference := Round(Abs(Offset * 24 * 60)); //multiply by 24 h and 60 min
  if TimeDifference = 0 then
  begin
    Zone := 'GMT'
  end else
  begin
    // create time difference string
    TimeDifference := (TimeDifference div 60) * 100 + (TimeDifference mod 60);
    if Offset < 0 then
      Zone := Format('-%.4u', [TimeDifference])
    else
      Zone := Format('+%.4u', [TimeDifference]);
  end;
  // get date and time values
  DecodeDate(Value, Year, Month, Day);
  DecodeTime(Value, Hour, Minute, Second, Dummy);
  // paste result
  Result := Format(
    '%s, %.2d %s %4d %.2d:%.2d:%.2d %s', [
      cWeekday[DayOfWeek(Value)], Day, cMonth[Month], Year, Hour, Minute,
      Second, Zone
    ]
  );
end;

function RFCToDateTimeA(RFC: AnsiString): TDateTime;
const
  cWeekDay = 'sun#mon#tue#wed#thu#fri#sat';
  cMonth = 'jan#feb#mar#apr#may#jun#jul#aug#sep#oct#nov#dec';
var
  Str: AnsiString;
  Year, Month, Day, Hour, Minute, Second: Word;
begin
  try
    RFC := Trim(RFC);
    // remove day name
    Str := LowerCase(Copy(RFC, 1, 3));
    if Pos(Str, cWeekDay) > 0 then
      Delete(RFC, 1, AnsiPos(' ', RFC));
    // get day of month
    Str := Trim(Copy(RFC, 1, AnsiPos(' ', RFC)));
    Day := StrToIntDef(Str, 0);
    // remove day of month
    Delete(RFC, 1, Length(Str) + 1);
    // get month
    Str := LowerCase(Copy(RFC, 1, 3));
    Month := (Pos(Str, cMonth) div 4) + 1;
    // remove month name
    Delete(RFC, 1, 4);
    // get year
    Str := Copy(RFC, 1, 4);
    Year := StrToIntDef(Str, 0);
    // remove Year
    Delete(RFC, 1, 5);
    // encode date
    Result := EncodeDate(Year, Month, Day);
    Str := RFC[1] + RFC[2];
    Hour := StrToIntDef(RFC[1] + RFC[2], 0);
    Minute := StrToIntDef(RFC[4] + RFC[5], 0);
    Second := StrToIntDef(RFC[7] + RFC[8], 0);
    Delete(RFC, 1, 9);
    // add time to the Date
    Result := Result + EncodeTime(Hour, Minute, Second, 0);
  except
    Result := 0;
  end;
end;
......
Daniel W.
Ich bin nicht zurück, ich tue nur so
  Mit Zitat antworten Zitat
Antwort Antwort

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:46 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz