PDA

View Full Version : یه Function درست و حسابی برای تبدیل تاریخ



Microsoft.net
جمعه 30 اردیبهشت 1384, 19:29 عصر
سلام خدمت دوستان کسی از شما یه تابع که درست کار کنه و تاریخ رو دقیق محاسبه کنه (شمسی به میلادی و بلعکس) اگه داره لطفا اینجا بزاره بقیه استفاده کنند من تمام function هایی که تو این فروم بود رو نگاه کردم 100% آنها تاریخ رو تو روزهایی پس و پیش می زدن . ممنونم از همتون

Microsoft.net
یک شنبه 01 خرداد 1384, 23:10 عصر
دمتون گرم اگه می شه یه حالی بدین به ما یه جوابی چیزی ...

shayan_re
پنج شنبه 05 خرداد 1384, 21:37 عصر
دوست عزیز من فکر میکنم که این تبدیل رو اگه به Application بسپرید بهتر باشه.
بحث استقلال نرم افزار رو فراموش نکنید.

GentleGuy
جمعه 06 خرداد 1384, 12:36 عصر
دوست عزیز من فکر میکنم که این تبدیل رو اگه به Application بسپرید بهتر باشه.
بحث استقلال نرم افزار رو فراموش نکنید

من هم کاملا با این نظریه موافقم . اول تاریخ تو applicatin تبدیل بشه بعد وارد db بشه :wink:

Microsoft.net
جمعه 06 خرداد 1384, 14:57 عصر
بعد اونوقت اگه من یه گزارش بخوام از یه بازه تاریخ بگیرم که بیش از 1000000 ردیف سند داره باید اول همه رو بیارم سمت کلاینت و یکی یکی تاریخشونو تبدیل کنم دوباره بدم به کریستال دیگه آره !!! دیگه Crystal Application Server هم هیچی دیگه !!!
بحث استقلال نرم افزار دوست من هیچ ارتباطی به این قضیه نداره
یا مثلا اگه من توی یکی از جدول ها 10000000 رکورد داشته باشم که فقط 100 تا از اونها توی اون بازه از تاریخ هست باید 10000000 رکورد بیاد سمت کلاینت بعد یکی یکی تاریخشونو از طریق application تبدیل کنم و فیلترشون کنم !!! در صورتی که اگه یه function sql بود خیلی راحت توی Where Clause می شد اینو نوشت در ضمن من اگه بخوام تاریخ تمام کارهام با سرور انجام بشه میشه با Application این کارو کرد ؟؟؟ قطعا نمیشه و اینجاست که یه فانکشن درست و حسابی لازمه :موفق:

majid_afra222
جمعه 06 خرداد 1384, 17:06 عصر
سلام Microsoft.net عزیز
در مورد بحثی که مطرح می کنی٬‌به نظر میآد احتیاجی به ایجاد یک تابع تبدیل تاریخ چندان نیاز نباشه وقتی اطلاعات مربوط به یک تاریخ خاص در یک بازه رو احتیاج داری مطمئنا اول تاریخ رو تعیین کردی و بعد اونرو تو شرط اعمال می کنی.
در ضمن برای انجام یه پرس و جو بر روی 10000000 رکورد احتیاجی نیست اونها رو به سمت کلاینت ببری و یکی یکی تبدیل تاریخ کنی و بعد فیلتر کنی٬‌ در برنامه ای که می نویسی اکثر درخواستها از سمت کلاینت به سمت سرور میره٬‌پس سرور اطلاعات مورد نیاز یه درخواست رو از کلاینت میگیره٬‌به همین خاطر اگه بتونیم زمانی رو که سرور به درخواسته پاسخ میده رو کاهش بدیم و سر سرور رو برای انجام کارهای بیشتر و مهمتر خلوت کنیم٬‌بهترهُ. برای مقایسه های تاریخها هم قبل از ارسال درخواست برای سرور تاریخ مورد نظر دریافتی رو از شمسی به میلادی تغییر بده٬‌برای سرور تاریخ میلادی مورد نظر رو ارسال کن٬ تا سرور در مقایسات از اون تاریخ میلادی استفاده کنه٬‌در زمان بازگشت پاسخها به سمت سرور چون کلاینتها اکثرا سرشون خلوت تره و سرعتشون هم خوبه٬ می تونی این کار تبدیل تاریخهای میلادی موجود در سرور رو به شمسی بعهده اونها بگذاری.

و اینکه

یا مثلا اگه من توی یکی از جدول ها 10000000 رکورد داشته باشم که فقط 100 تا از اونها توی اون بازه از تاریخ هست باید 10000000 رکورد بیاد سمت کلاینت بعد یکی یکی تاریخشونو از طریق application تبدیل کنم و فیلترشون کنم !!! در صورتی که اگه یه function sql بود خیلی راحت توی Where Clause می شد اینو نوشت

خوب اگه بجای همون تابعی که میگی فقط تو Where Clause باید نوشت٬ قبل از ارسال درخواست به سرور تاریخ مورد نظر رو بفرستیم و در Where Clause بگذاریمش٬‌ راحتتر نیست.

GentleGuy
جمعه 06 خرداد 1384, 21:37 عصر
اونوقت اگه من یه گزارش بخوام از یه بازه تاریخ بگیرم که بیش از 1000000 ردیف سند داره باید اول همه رو بیارم سمت کلاینت و یکی یکی تاریخشونو تبدیل کنم دوباره بدم به کریستال دیگه آره !!!

نه عزیز شما اول تاریخ رو تبدیل می کنی و تاریخ فارسی رو می ریزی تو دیتا بیس و مقع گزارش گیری هم خیلی راحت query کوچولو مینویسی :wink:

jirjirakk
جمعه 06 خرداد 1384, 23:56 عصر
من به شخصه ذخیره سازی تاریخ میلادی رو توی دیتابیس ترجیح میدم و اما برای تبدیلش هم که تا الان همیشه سمت کلاینت این کار رو انجام میدادم (شرمنده جناب مایکروسافت دات نت چون جواب من به سوال شما ربطی نداشت ) :sorry:

AminSobati
شنبه 07 خرداد 1384, 22:28 عصر
ذخیره سازی تاریخ میلادی که در پست قبلی ذکر شد بنا به چند دلیل کار بسیار صحیحی هستش. حتما در کنار تاریخ شمسی، میبایست تاریخ میلادی رو هم نگه داشت تا بعضی پردازشها در آینده راحت تر انجام بشه.
اما در مورد مشکلاتی که برای تبدیل تاریخ در سمت سرور وجود داره، شما که چند سال تحمل کردین، چند ماه دیگه هم صبر کنین تا SQL Server 2005 به بهترین نحو این مشکل رو حل کنه! به طور خلاصه اگر بخواهیم بگیم، شما خواهید توانست تابع تبدیل تاریخ رو در VB.NET یا #C بنویسید و در SQL Server قرار بدین تا براحتی ازش استفاده کنه(نیازی به ارجاع تاریخ به سمت کلاینت نیست)

JavanSoft
یک شنبه 08 خرداد 1384, 17:37 عصر
من در برخی پروژه هایم که مجبور به تبدیل تاریخ هستم از یک جدول از پیش ساخته شده که معادل لاتین تاریخ فارسی را نگه می دارد استفاده می کنم ... شاید پیشنهاد بدی نباشد

Microsoft.net
یک شنبه 08 خرداد 1384, 22:58 عصر
جوان سافت عزیز ممنونم که جواب دادین ولی فکر می کنم تو سرعت تاثیر داشته باشه ؟ :گیج: چون توی هر Select باید یه بار جون کنیم با این table ولی پیشنهاد خوبیه . فقط از سرعتش می ترسم . مگه اینکه تاریخ میلادی رو تو این table به عنوان PK بگیریم نظر شما چیه ؟

Microsoft.net
یک شنبه 08 خرداد 1384, 23:08 عصر
در ضمن هر سال مگه تاریخها با هم فرق نمی کنن ؟ یعنی اگه 29/05/2005 بشه 7/03/1384 سال بعد 29/05/2006 هم میشه 7/03/1384 ؟؟؟؟؟