PDA

View Full Version : تفکیک کردن یک رشته تاریخ به روز ، ماه و سال(پیمایش یک رشته)



amir_ir
شنبه 02 آبان 1388, 13:12 عصر
سلام به همه دوستان
فیلد تاریخی به صورت (10)Nvarchar در دیتابیس تعریف شده. حال اگر بخواهیم تاریخی مثلا به صورت 02/12/1388 را به روز ، ماه و سال تفکیک کرد و هر کدام رو در یک EditBox بریزیم ؟
ممنون میشم اگر راهنمایی کنید از چه کدی باید استفاده کرد
شاد و پیروز

nima898
شنبه 02 آبان 1388, 13:35 عصر
سلام
فیلد تاریخ شما رشته هست؟
اگه از تو رشته قصد استخراج روز و ماه و سال رو داشته باشید من واستون کدشو به زبان vb میتونم بنویسم.

مجتبی تاجیک
شنبه 02 آبان 1388, 13:44 عصر
سلام
فیلد تاریخ شما رشته هست؟
اگه از تو رشته قصد استخراج روز و ماه و سال رو داشته باشید من واستون کدشو به زبان vb میتونم بنویسم.
اینجا انجمن دلفی هست !

میتونید از تابع DecodeDate از یونیت DateUtils استفاده کنید .

merced
شنبه 02 آبان 1388, 16:51 عصر
function StrToYMD(S: String; var Y, M, D: Word): Boolean;
var
P: Integer;
begin
Result := False;
try
P := Pos('/', S);
if P > 0 then
begin
Y := StrToInt(Copy(S, 1, P - 1));
Delete(S, 1, P);
P := Pos('/', S);
if P > 0 then
begin
M := StrToInt(Copy(S, 1, P - 1));
D := StrToInt(Copy(S, P + 1, Length(S) - P));
Result := True;
end;
end;
except
end;
end;

مجتبی تاجیک
شنبه 02 آبان 1388, 17:44 عصر
function StrToYMD(S: String; var Y, M, D: Word): Boolean;
var
P: Integer;
begin
Result := False;
try
P := Pos('/', S);
if P > 0 then
begin
Y := StrToInt(Copy(S, 1, P - 1));
Delete(S, 1, P);
P := Pos('/', S);
if P > 0 then
begin
M := StrToInt(Copy(S, 1, P - 1));
D := StrToInt(Copy(S, P + 1, Length(S) - P));
Result := True;
end;
end;
except
end;
end;

:متفکر:این همه کپی و ... چرا ؟ من که تابع رو معرفی کردم ، کد میشه این :

var
MyDate:TDate;
Year,Month,Day:Word;
begin
MyDate:=StrToDate('2009/10/24');
DecodeDate(MyDate,Year,Month,Day);
ShowMessage(IntToStr(Year)+'-'+IntToStr(Month)+'-'+IntToStr(Day));
end;

یونیت DateUtils رو Uses کنید .

K.Mohammadreza
شنبه 02 آبان 1388, 19:57 عصر
دوست من تاريخ وارد شده شمسي است نه ميلادي



procedure FDateDecode(StrDate: string; var Y, M, D: Word);
var
slCString: TStringList;
begin
if Length(StrDate) = 0 then
Exit;
slCString := TStringList.Create;
slCString.Text := StringReplace(StrDate, '/', sLineBreak, [rfReplaceAll]);
Y := StrToInt(slCString.Strings[0]);
M := StrToInt(slCString.Strings[1]);
D := StrToInt(slCString.Strings[2]);
slCString.Free;
end;

مجتبی تاجیک
شنبه 02 آبان 1388, 20:24 عصر
ایشون مثال زدن ، اگر تاریخشون شمسی باشه ، پس حتما از کامپوننتهای تقویم شمسی تو برنامشون استفاده کردن که این کامپوننتها خودشون این امکانات رو در اختیار برنامه نویس قرار میدن .

hadisalahi2
یک شنبه 03 آبان 1388, 10:56 صبح
من هم با نظر SilverSoft (http://barnamenevis.org/forum/member.php?u=63881)موافقم.
فرقی نمیکنه تاریخ چه مدلی باشه.با سه تا تابع Copy ساده هم میشه این کار رو انجام داد.

tdkhakpur
یک شنبه 03 آبان 1388, 13:17 عصر
ممكن هست تاريخ بصورت( 8)Nvarchar باشند نه (10)Nvarchar !
استفاده از توابه آماده به خاطر تست شدنشان بهتر ه ولي بعضي جاها بايد كدنويسي كرد.

مجتبی تاجیک
یک شنبه 03 آبان 1388, 13:26 عصر
:چشمک:باز من و شما تو یه تاپیک به هم رسیدیم ، بابا پست اول رو بخون :


فیلد تاریخی به صورت (10)Nvarchar در دیتابیس تعریف شده.
ما طبق گفته های شخصی که سوال میپرسته جواب میدیم نه بر حسب اتفاقاتی که ممکنه رخ بده ، اینجوری اگه بخواهیم فکر کنیم ممکنه 10 تا اتفاق دیگه هم رخ بده !

:چشمک:بی خیال ...