ورود

View Full Version : سوال: مشکل تبدیل تاریخ روز 31/06/ در دیتا گرید



pourang_us
شنبه 08 آبان 1389, 17:29 عصر
با درود
دوستان عزیز من برای تبدیل تاریخ میلادی به شمسی یک تابع نوشتم که توسط خود توابع تقویم دات نت تاریخ رو تبدیل میکنه در همه جای برنامه هم درست کار میکنه اما:
1- من برای تبدیل تاریخ در دیتا گرید هنوز راه استانداردی رو ندارم
2- وقتی داخل یک حلقه قرار میدم این تبدیل تاریخ رو اولا که سرعت اجرا کند میشود و از همه مهمتر برای فقط تاریخ 31/06 خطای زیر رو http://www.sharefile.ir/uploads/1288463346.jpg

رو میده کسی میدونه چطئری میتونم اولا به روش استاندارد این کار رو انجام بدم و در ثانی این خطا منشاء از کجاست؟


با سپاس از وقت شما

dataking
شنبه 08 آبان 1389, 17:41 عصر
سلام
تاریخ را به صورت رشته ذخیره کن
من خودم به شخصه با تاریخ مثل یک رشته برخورد می کنم درست یا غلط بودنش هم نمی دونم خب با اون تابع و به کمک mask text box می تونی مشکل را حل کنی
لبته برای تهیه گزارش قطعا یه مشکلاتی را در پی خواهد داشت که من هم بهشون برخورد کردم ولی خب اونقدر حاد نبوده

اینها فقط نظر شخصی منه

pourang_us
شنبه 08 آبان 1389, 18:38 عصر
دوست عزیز
ممنون از وقت و راهنمایی شما اما مهمترین نکته این است که من اگر از فرمت رشته استفاده کنم انجام عملیات روی تاریخ برام یک مقدار سخت تر میشه و در این حالت الان فقط با این تاریخ اون هم در دیتا گرید و در این روز خاص مشکل دارم که اون رو هم البته با تغییر و ریختن تاریخ تو یک ستون جدید حل کردم اما فقط یک مشکل دارم و آن هم کند شدن اجرای دیتا گرید هست.
کسی از دوستان هست که بدونه راه دیگری برای تبدیل تاریخ به صورت شمسی در دیتا گرید وجود داره یا خیر ؟

dataking
شنبه 08 آبان 1389, 18:46 عصر
یه کلیک اینجا (http://www.barnamenevis.org/forum/showthread.php?t=256303)کن ببین مشکلت حل نمی شه
موفق باشید
آقای علی نجاری متخصص تاریخه ازشون بپرس حتما جواب می ده

b.mahsa
شنبه 08 آبان 1389, 18:54 عصر
میتونید تاریخ رو به صورت رشته ذخیره کنید و موفقعی میخواهید ازش استفاده کنید . روز و ماه و سال رو از هم جدا کنید . بعد استفاده کنید.



Dim s() As String
Dim date As String = "1385/10/02"
s = s2.Split("/")
s(0) = > year
s(1) => month
s(2) => day




برای تبدیل هم dll های زیادی تو همین سایت هست .

pourang_us
شنبه 08 آبان 1389, 19:20 عصر
ممنون از وقتی که دوستان برای ارسال پاسخ به مشکل من اختصاص میدهید

من فقط به فقط برای تبدیل تاریخ در دیتا گرید به شمسی مشکل دارم و بنا به دلیل ساختار برنامه امکان استفاده از تاریخ شمسی و همچنین رشته ای رو در بانکم ندارم (شاید یکی از دلایلش این باشه که بانک نرم افزارم الان در حال استفاده است و دیتا دارد) هم چنین با این نوع عملیات تبدیل هم مشکلی ندارم
اما برای اولین بار دارم از تاریخ شمسی در دیتا گرید استفاده میکنم و همین باعت شده و اونهم به این شکل که تاریخ میلادی رو میگیرمو با یک حلقه اون رو تبدیل به شمسی میکنم اما با این روش زمان و منابع خیلی زیادی برای باز کردن یک لیست ساده که به مرور زمان حجم اطلاعاتی اون به دهها برابر فعلی میرسه را مصرف میکنم

اگر از دوستان کسی تجربه استفاده از تاریخ شمسی (تبدیل از میلادی)
از بانک رو داره ممنون میشم روش خودش رو به من هم پیشنهاد بده.

با سپاس

L u k e
شنبه 08 آبان 1389, 19:29 عصر
کل بهتره تاریخ توی String بریزی ( شمسی شده شو)
Datetime بعضی وقت ها eror می ده
و هر وقت خواستی توی DB ذخیره کنی اونموقع به Datetime تبدیلش کن
من خیلی از این مشکلا داشتم ولی حل شده با این روش



public static string ToShamsi(string _Date)
{

DateTime date = DateTime.Parse(_Date);
PersianCalendar pc = new PersianCalendar();

return pc.GetYear(date).ToString() + "/" + pc.GetMonth(date).ToString() + "/" + pc.GetDayOfMonth(date).ToString();


}

public static System.DateTime ToMiladi(string _date)
{

string[] dt = _date.Split("/"[0]);


PersianCalendar PC = new PersianCalendar();


return PC.ToDateTime(int.Parse(dt[0]), int.Parse(dt[1]), int.Parse(dt[2]), 0, 0, 0, 0);


}

nosrati1363
یک شنبه 09 آبان 1389, 02:14 صبح
سلام
لازم نیست حتما با تاریخ تو تمام برنامت مثل رشته برخورد کنی . کد زیر رو توجه کن


Dim Tarikhshamsi As New Globalization.PersianCalendar
این متغیر از نوع datetime هست و تمام member های اون رو support میکنه . هر جور عملیاتی دوست داشته باشی با این متغیر میتونی انجام بدی . پس تو قسمت های قبلی که مشکلی نداره وقت Prosses برنامت رو هم نمیگیره تمرین کن مطمئنم جواب میگیری
اگه جواب گرفتی !!!:خجالت::خجالت::خجالت:

kebriya
یک شنبه 09 آبان 1389, 10:23 صبح
دوست عزیز منم این مشکل رو داشتم البته موقعی که میخواستم تفاضل دو تاریخ رو پیدا کنم به بعضی از تاریخ ها گیر میداد مثل 30/2 یا 31/6 که فهمیدم چون ماه 2 میلادی 28 روزه است به این گیر میده با اینکه من شمسی گذاشتم واسه رفع این مشکل مجبور شدم خودم کد بزنم

pourang_us
یک شنبه 09 آبان 1389, 10:48 صبح
دوستان خوبم
از اینکه برای حل مشکل من وقت گذاشتید سپاسگذارم.
من هیچ مشکل با تبدیل تاریخ به وسیله



Globalization.PersianCalendar


ندارم و وان خطا فقط در زمان اجرا و در دیتا گرید گرفته میشد که من با اضافه کردن یک ستون جدید به دیتا گرید مشکل رو فعلا برطرف کردم
اما مشکل جدید من کندی در اجرای فارسی کردن تاریخ در دیتا گرید هست چون من تاریخ ها رو به صورت میلادی ذخیره کردم (و همچنان هم به این شکل عمل میکنم ) نمیتوانم به ساختار بانکم دست بزنم.
حتی اگر در این بخش هم تاریخ رو شمسی یا به صورت رشته دخیره کنم باز هم در قسمتی دیگر از برنامه ام (که از بانک یک نرم افزار دیگر اطلاعات را دریافت میکند) دچار مشکل خواهم شد.
کسی تا به حال تاریخ میلادی رو به شمسی در دیتا گرید استفاده نکرده است؟