Code:

function DateTimeToRfcTime(

dt: TDateTime;

iDiff: integer;

blnGMT: boolean = false): string;

{*

Explanation:

iDiff is the local offset to GMT in minutes

if blnGMT then Result is UNC time else local time

e.g. local time zone: ET = GMT - 5hr = -300 minutes

dt is TDateTime of 3 Jan 2001 5:45am

blnGMT = true -> Result = 'Wed, 03 Jan 2001 05:45:00 GMT'

blnGMT = false -> Result = 'Wed, 03 Jan 2001 05:45:00 -0500'

*}

const

Weekday: array[1..7] ofstring =

('Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat');

Month: array[1..12] ofstring = (

'Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun',

'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec');

var

iDummy: Word;

iYear: Word;

iMonth: Word;

iDay: Word;

iHour: Word;

iMinute: Word;

iSecond: Word;

strZone: string;

begin

if blnGMT then

begin

dt := dt - iDiff / 1440;

strZone := 'GMT';

end

else

begin

iDiff := (iDiff div60) * 100 + (iDiff mod60);

if iDiff < 0then

strZone := Format('-%.4d', [-iDiff])

else

strZone := Format('+%.4d', [iDiff]);

end;

DecodeDate(dt, iYear, iMonth, iDay);

DecodeTime(dt, iHour, iMinute, iSecond, iDummy);

Result := Format('%s, %.2d %s %4d %.2d:%.2d:%.2d %s', [

Weekday[DayOfWeek(dt)], iDay, Month[iMonth], iYear,

iHour, iMinute, iSecond, strZone]);

end;

 

function RfcTimeToDateTime(

strTime: string;

blnGMT: boolean = true): TDateTime;

{*

Explanation:

if blnGMT then Result is UNC time else local time

e.g. local time zone: ET = GMT - 5hr = -0500

strTime = 'Wed, 03 Jan 2001 05:45:00 -0500'

blnGMT = true -> FormatDateTime('...', Result) = '03.01.2001 10:45:00'

blnGMT = false -> FormatDateTime('...', Result) = '03.01.2001 05:45:00'

*}

const

wd = 'sun#mon#tue#wed#thu#fri#sat';

month = 'janfebmaraprmayjunjulaugsepoctnovdec';

var

s: string;

dd: Word;

mm: Word;

yy: Word;

hh: Word;

nn: Word;

ss: Word;

begin

s := LowerCase(Copy(strTime, 1, 3));

if Pos(s, wd) > 0then

Delete(strTime, 1, Pos(' ', strTime));

s := Trim(Copy(strTime, 1, Pos(' ', strTime)));

Delete(strTime, 1, Length(s) + 1);

dd := StrToIntDef(s, 0);

s := LowerCase(Copy(strTime, 1, 3));

Delete(strTime, 1, 4);

mm := (Pos(s, month) div3) + 1;

s := Copy(strTime, 1, 4);

Delete(strTime, 1, 5);

yy := StrToIntDef(s, 0);

Result := EncodeDate(yy, mm, dd);

s := strTime[1] + strTime[2];

hh := StrToIntDef(strTime[1] + strTime[2], 0);

nn := StrToIntDef(strTime[4] + strTime[5], 0);

ss := StrToIntDef(strTime[7] + strTime[8], 0);

Delete(strTime, 1, 9);

Result := Result + EncodeTime(hh, nn, ss, 0);

if (CompareText(strTime, 'gmt') <> 0) and blnGMT then

begin

hh := StrToIntDef(strTime[2] + strTime[3], 0);

nn := StrToIntDef(strTime[4] + strTime[5], 0);

if strTime[1] = '+'then

Result := Result - EncodeTime(hh, nn, 0, 0)

else

Result := Result + EncodeTime(hh, nn, 0, 0);

end;

end;

 

 

Взято с Delphi Knowledge Base: https://www.baltsoft

 

 


 

Code:

function RFC1123ToDateTime(Date: string): TDateTime;

var

day, month, year: Integer;

strMonth: string;

Hour, Minute, Second: Integer;

begin

try

day := StrToInt(Copy(Date, 6, 2));

strMonth := Copy(Date, 9, 3);

if strMonth = 'Jan'then month := 1

elseif strMonth = 'Feb'then month := 2

elseif strMonth = 'Mar'then month := 3

elseif strMonth = 'Apr'then month := 4

elseif strMonth = 'May'then month := 5

elseif strMonth = 'Jun'then month := 6

elseif strMonth = 'Jul'then month := 7

elseif strMonth = 'Aug'then month := 8

elseif strMonth = 'Sep'then month := 9

elseif strMonth = 'Oct'then month := 10

elseif strMonth = 'Nov'then month := 11

elseif strMonth = 'Dec'then month := 12;

year := StrToInt(Copy(Date, 13, 4));

hour := StrToInt(Copy(Date, 18, 2));

minute := StrToInt(Copy(Date, 21, 2));

second := StrToInt(Copy(Date, 24, 2));

Result := 0;

Result := EncodeTime(hour, minute, second, 0);

Result := Result + EncodeDate(year, month, day);

except

Result := now;

end;

end;

 

 

function DateTimeToRFC1123(aDate: TDateTime): string;

const

StrWeekDay: string = 'MonTueWedThuFriSatSun';

StrMonth: string = 'JanFebMarAprMayJunJulAugSepOctNovDec';

var

Year, Month, Day: Word;

Hour, Min, Sec, MSec: Word;

DayOfWeek: Word;

begin

DecodeDate(aDate, Year, Month, Day);

DecodeTime(aDate, Hour, Min, Sec, MSec);

DayOfWeek := ((Trunc(aDate) - 2) mod7);

Result := Copy(StrWeekDay, 1 + DayOfWeek * 3, 3) + ', ' +

Format('%2.2d %s %4.4d %2.2d:%2.2d:%2.2d',

[Day, Copy(StrMonth, 1 + 3 * (Month - 1), 3),

Year, Hour, Min, Sec]);

end;

 

 

 

 

Взято с сайтаhttps://www.swissdelphicenter.ch/en

Добавить комментарий

Не использовать не нормативную лексику.

Просьба писать ваши замечания, наблюдения и все остальное,
что поможет улучшить предоставляемую информацию на этом сайте.

ВСЕ КОММЕНТАРИИ МОДЕРИРУЮТСЯ ВРУЧНУЮ, ТАК ЧТО СПАМИТЬ БЕСПОЛЕЗНО!


Защитный код
Обновить