Вверх ↑
Ответов: 4631
Рейтинг: 749
#1: 2014-03-07 16:38:50 ЛС | профиль | цитата
Сейчас попробую.
------------ Дoбавленo в 16.38:
Вот как-то так:

Add(MainForm,2953706,21,105)
{
Width=292
Height=226
Position=1
}
Add(Button,3342741,287,154)
{
Left=25
Top=20
Data=String(ABCDEF)
link(onClick,7763379:doData,[])
}
Add(Time,4805613,329,91)
{
Point(DateTime)
}
Add(InlineCode,10542117,448,280)
{
WorkPoints=#90:doTimeToUTC=Превращает локальную DateReal в UTC DateReal исходя из настроек часового пояса|
EventPoints=#8:onResult|
Code=#15:unit HiAsmUnit;|0:|9:interface|0:|30:uses Windows, kol,Share,Debug;|0:|4:type|28: THiAsmClass = class(TDebug)|10: private|0:|9: public|27: onResult:THI_Event; |56: procedure doTimeToUTC(var _Data:TData; index:word);|5: end;|0:|5:const|35: UnixStartDate: TDateTime = 25569;|0:|4:var |35: OffsetFromUTC: Integer; // Минуты|2: |14:implementation|0:|0:|35:function GetOffsetFromUTC: Integer;|3:var|17: iBias: Integer;|29: tmez: TTimeZoneInformation;|5:begin|13: iBias := 0;|0:|38: case GetTimeZoneInformation(tmez) of|27: TIME_ZONE_ID_UNKNOWN :|26: iBias := tmez.Bias;|27: TIME_ZONE_ID_DAYLIGHT :|9: begin|25: iBias := tmez.Bias;|43: if tmez.DaylightDate.wMonth <> 0 then|11: begin|43: iBias := iBias + tmez.DaylightBias;|10: end;|8: end;|27: TIME_ZONE_ID_STANDARD :|9: begin|25: iBias := tmez.Bias;|43: if tmez.StandardDate.wMonth <> 0 then|11: begin|43: iBias := iBias + tmez.StandardBias;|10: end;|7: end|6: end;|4: |70: {The GetTimeZone function returns values oriented towards converting|73: a GMT time into a local time. We wish to do the opposite by returning|76: the difference between the local time and GMT. So I just make a positive|57: value negative and leave a negative value as positive}|0:|19: Result := -iBias;|4:end;|0:|0:|0:|64:procedure THiAsmClass.doTimeToUTC(var _Data:TData; index:word); |3:var|11: DT: Real;|5:begin|22: DT := ToReal(_Data);|36: DT := DT - (OffsetFromUTC / 1440);|40: _hi_CreateEvent(_Data, @onResult, DT);|4:end;|0:|0:|14:initialization|36: OffsetFromUTC := GetOffsetFromUTC;|0:|4:end.|
link(onResult,16384554:doConvert,[])
}
Add(DoData,7763379,336,154)
{
link(onEventData,11927620:doEvent1,[])
link(Data,4805613:DateTime,[])
}
Add(ListBox,12157137,812,154)
{
Left=25
Top=50
Width=200
Height=115
}
Add(Hub,9546187,581,154)
{
link(onEvent1,14375896:doEvent1,[])
link(onEvent2,4484966:doConvert,[])
}
Add(Hub,14375896,770,154)
{
InCount=4
OutCount=1
link(onEvent1,12157137:doAdd,[])
}
Add(Hub,7211647,602,280)
{
link(onEvent1,5713220:doStrCat,[(640,286)(640,244)])
link(onEvent2,12032341:doConvert,[])
}
Add(DateConvertor,12032341,658,287)
{
Mode=16
link(onResult,2324350:doStrCat,[])
}
Add(DateConvertor,4484966,623,161)
{
Mode=16
link(onResult,14375896:doEvent2,[])
}
Add(DateConvertor,14686218,532,154)
{
Mode=19
link(onResult,9546187:doEvent1,[])
}
Add(Hub,11927620,399,154)
{
link(onEvent1,14686218:doConvert,[])
link(onEvent2,10542117:doTimeToUTC,[(423,167)(423,286)])
}
Add(DateConvertor,16384554,532,280)
{
Mode=19
link(onResult,7211647:doEvent1,[])
}
Add(StrCat,2324350,707,287)
{
Str1="UTC: "
link(onStrCat,14375896:doEvent4,[(751,293)(751,181)])
}
Add(StrCat,5713220,658,238)
{
Str1="UTC: "
link(onStrCat,14375896:doEvent3,[(709,244)(709,174)])
}
Можно в конвертер добавить свойство, включающее преобразование входной/выходной даты в/из Local/UTC. Или ещё лучше, добавить две точки в Time: UTCOffsetReal, UTCOffsetUnix. Первая используется для вычисления DateReal и VCLDate, а вторая - DateUnix. Значения этих точек нужно добавлять/отнимать от соответствующих дат.
карма: 26

0