PDA

View Full Version : سوال: ذخیره ساعت در جدول db



رزابرنامه یاب
شنبه 21 مرداد 1391, 13:29 عصر
سلام
من میخوام ساعت و تاریخ سیستم رو وقتی که کاربر روی یه دکمه کلیک میکنه به صورت خودکار در جدولی در db ذخیره کنم. بدون اینکه کاربر اصلا بفهمه که ساعت و تاریخ زمانی که مثلا دکمه ثبت اطلاعاتشو میزنه ، هم ذخیره میشه...مثل همین تایپک ها که ما سوالامونو می نویسیم ، ساعت ثبت تایپیک خودکار ذخیره میشه..

اگه ساعت سیستم رو با now.date ذخیره کنم، نمیشه چون از وقتی که صفحه لود میشه ، ساعته همین جور ثابت میمونه و تغییر نمیکنه.

اگرم از کد جاوا استفااده کنم که ساعتو نشون بده ، نمیشه . چون اکد جاوا در یه تگی ساعتو نشون میده که تگ رو که نمیشه در db ذخیره کرد. تازه تاریخ شمسی میخوام..

لطفا اگه ذخیره ساعتو میدونید راهنمایی کنید. مرسی

saeed_sho
شنبه 21 مرداد 1391, 15:01 عصر
سلام
دو تا راه داری
1- تاریخو اول تبدیل کنی به شمسی بعد ذخیره کنی برای اینکار یه تابع بنویس که تاریخ جاری رو به شمسی تبدیل کنه و برات برگردونه و مقدار برگشتی رو در یک متغیر بریز و مقدار متغیرو در دیتابیست ذخیره کن
2- تاریخو به صورت میلادی در دیتابیس ذخیره کن و موقع نشان دادن مقدارش اونو به شمسی تبدیل کن و نشون بده برای اینکار هم میتونی تاریخ میلادی جاری رو خودت بدی و هم میتونی در جدولت در دیتابیس از Constraint Default استفاده کنی که هر بار که رکوردی در جدولت درج میکنی خودش مقدار تاریخ میلادی جاری رو برات درج میکنه

من خودم همیشه از راه دوم استفاده میکنم
در موردش سرچ کن الان نمیتونم زیاد توضیح بدم ساعت 6 یا 6:30 میام برات کد میزارم

موفق باشید

saeed_sho
یک شنبه 22 مرداد 1391, 09:37 صبح
شرمنده دیر جواب میدم
برای استفاده از هر دو راهی که در پست قبل گفتم به این تابع احتیاج داری قبلش باید فضای نامی System.Globalization رو اضافه کنی
Public Function MiladiToShamsi(ByVal miladi As DateTime) As String
Dim persianDate As New PersianCalendar()
Try
Dim day As Integer = persianDate.GetDayOfMonth(miladi)
Dim month As Integer = persianDate.GetMonth(miladi)
Dim year As Integer = persianDate.GetYear(miladi)

Return year.ToString() & "/" & IIf(month < 10, "0", "").ToString() & month.ToString() & "/" & IIf(day < 10, "0", "").ToString() & day.ToString()
Catch ex As Exception
Return ""
End Try
End Function

اگه vb بلد نیستی بگ سی شارپ بزارم
اگر مقدار جاری رو میخوای تبدیل کنی مقدارDateTime.Now رو بعنوان پارامتر بهش پاس بده
راه دوم اینه که تاریخو ساعت جاری رو میلادی ذخیره کنی و اینکارو خوده جدولت انجام بده و موقع نمایش مقدارشو برگردونی به شمسی
برای اینکار جدول رو در دیتابیس اینجوری تغییر بده
ALTER TABLE [dbo].[PM] ADD CONSTRAINT [DF_Date] DEFAULT (getdate()) FOR [CreatedDate]
GO
PM اسم جدولمه و CreateDate هم اسم فیلدمه شما هر اسمی خواستی جایگزین کن
اینجوری شما اصلا به فیلدت چیزی اضافه نمیکنی و اون خودش تاریخ و ساعت میلادی رو درج میکنه و شما فقط موقع واکشی تبدیل کن به شمسی

اگه بازم سؤال داشتی بپرس
موفق باشید

رزابرنامه یاب
یک شنبه 22 مرداد 1391, 12:36 عصر
شرمنده دیر جواب میدم
برای استفاده از هر دو راهی که در پست قبل گفتم به این تابع احتیاج داری قبلش باید فضای نامی System.Globalization رو اضافه کنی
Public Function MiladiToShamsi(ByVal miladi As DateTime) As String
Dim persianDate As New PersianCalendar()
Try
Dim day As Integer = persianDate.GetDayOfMonth(miladi)
Dim month As Integer = persianDate.GetMonth(miladi)
Dim year As Integer = persianDate.GetYear(miladi)

Return year.ToString() & "/" & IIf(month < 10, "0", "").ToString() & month.ToString() & "/" & IIf(day < 10, "0", "").ToString() & day.ToString()
Catch ex As Exception
Return ""
End Try
End Function

اگه vb بلد نیستی بگ سی شارپ بزارم
اگر مقدار جاری رو میخوای تبدیل کنی مقدارDateTime.Now رو بعنوان پارامتر بهش پاس بده
راه دوم اینه که تاریخو ساعت جاری رو میلادی ذخیره کنی و اینکارو خوده جدولت انجام بده و موقع نمایش مقدارشو برگردونی به شمسی
برای اینکار جدول رو در دیتابیس اینجوری تغییر بده
ALTER TABLE [dbo].[PM] ADD CONSTRAINT [DF_Date] DEFAULT (getdate()) FOR [CreatedDate]
GO
PM اسم جدولمه و CreateDate هم اسم فیلدمه شما هر اسمی خواستی جایگزین کن
اینجوری شما اصلا به فیلدت چیزی اضافه نمیکنی و اون خودش تاریخ و ساعت میلادی رو درج میکنه و شما فقط موقع واکشی تبدیل کن به شمسی

اگه بازم سؤال داشتی بپرس
موفق باشید


واقعا ممنون، خواهش میکنم خیلی هم زود ج دادید،،،ممنون از توجهتون... فقط تو ااین تایپک شما گفتید تاریخ، ساعت چه طوریه؟؟ میشه اونم بگید؟؟ بازم ممنون از لطفتون

saeed_sho
یک شنبه 22 مرداد 1391, 13:12 عصر
فقط تو ااین تایپک شما گفتید تاریخ، ساعت چه طوریه؟؟ میشه اونم بگید؟؟
فانکشن رو اینجوری بنویسید به return اول توجه کنید آخرش ساعتو اضافه کردم
Public Shared Function MiladiToShamsi(ByVal miladi As DateTime) As String
Dim persianDate As New PersianCalendar()
Try
Dim day As Integer = persianDate.GetDayOfMonth(miladi)
Dim month As Integer = persianDate.GetMonth(miladi)
Dim year As Integer = persianDate.GetYear(miladi)

Return year.ToString() & "/" & IIf(month < 10, "0", "").ToString() & month.ToString() & "/" & IIf(day < 10, "0", "").ToString() & day.ToString() & " " & miladi.TimeOfDay.ToString()
Catch ex As Exception
Return ""
End Try
End Function
بازم مشکل داشتین بگید

موفق باشید

رزابرنامه یاب
یک شنبه 22 مرداد 1391, 17:16 عصر
[QUOTE=saeed_sho;1569609]فانکشن رو اینجوری بنویسید به return اول توجه کنید آخرش ساعتو اضافه کردم
[

خیلی خیلی ممنون، توضیحاتتون انقدر واضح و شفاف بود که نیازی به سوال نیست..
فقط یه سوال ابتدایی اینکه پایگاه من sqlExpress هست. تو خود برنامم درستش کردم. حالا برای اون راه حل دوم که گفتید ، یه Query ساختم .که alter رو انجام بده اما حالا میخوام query رو باز کنم .. نیدونم کجاست؟ اصلا همون موقع بستنم ازم آدرس save رو نخواست. ولی اون query همچنان کار میکنه.. البته Go رو نذاشتما.! Query کجاست؟ لازمش دارم..

2-یه سوال دیگه دارم. البته جدا از این موضوع است. چه جوری میشه دو تا تاریخو از هم کم کرد؟ مثلا فاصله ی بین تاریخ خروج و تاریخ ورود رو میشه حساب کرد؟من از split استفاده کردم برای جاسازی سال و ماه و روز. ر.زا رو میشه از هم کم رد.. اما اگه سال ها هم با هم فرق داشته باشن رو نتونستم...

ممنون از راهنماییتون

saeed_sho
چهارشنبه 25 مرداد 1391, 12:35 عصر
شرمنده دیر جواب میدم به حاطر مشغله زیاد 3 روز به سایت سر نزدم

فقط یه سوال ابتدایی اینکه پایگاه من sqlExpress هست. تو خود برنامم درستش کردم. حالا برای اون راه حل دوم که گفتید ، یه Query ساختم .که alter رو انجام بده اما حالا میخوام query رو باز کنم .. نیدونم کجاست؟ اصلا همون موقع بستنم ازم آدرس save رو نخواست. ولی اون query همچنان کار میکنه.. البته Go رو نذاشتما.! Query کجاست؟ لازمش دارم..
من تا حالا با نسخه sqlExpress کار نکردم ماله من نسخه ی دولوپره اما در نسخه ی دولوپر میگم کجاست ببین در نسخه ی اکسپرس پیدا میکنی یا نه
گره جدولو باز کن منظورم همون بعلاوه کنارشه بعد در گره constraints باید اسمشو ببینی که در کد بالا من اسمشو DF_Date گذاشتم شما هر اسمی گذاشتی باید نشون بده


-یه سوال دیگه دارم. البته جدا از این موضوع است. چه جوری میشه دو تا تاریخو از هم کم کرد؟ مثلا فاصله ی بین تاریخ خروج و تاریخ ورود رو میشه حساب کرد؟من از split استفاده کردم برای جاسازی سال و ماه و روز. ر.زا رو میشه از هم کم رد.. اما اگه سال ها هم با هم فرق داشته باشن رو نتونستم...
برای این مشکل من این کارو میکنم
Dim dt1 As DateTime=DateTime.Now
Dim dt2 As DateTime= تاریخ دومتو بزار
Dim dayCount As TimeSpam = dt1 - dt2
در قسمت تاریخ اول و دوم هر تاریخی میخوای بزار و با شیء TimeSpam روز، ماه، سال و هر اختلافی بخوای رو بهت میده در این مثال متغیر dayCount بنویس بعد یه دات بزن همه ی مقدارهارو نشونت میده
کدهارو دستی نوشتم فکر کنم نامنظم شد

بازم سؤال داشتی بپرس

موفق باشید

رزابرنامه یاب
پنج شنبه 26 مرداد 1391, 15:30 عصر
من تا حالا با نسخه sqlExpress کار نکردم ماله من نسخه ی دولوپره اما در نسخه ی دولوپر میگم کجاست ببین در نسخه ی اکسپرس پیدا میکنی یا نه
گره جدولو باز کن منظورم همون بعلاوه کنارشه بعد در گره constraints باید اسمشو ببینی که در کد بالا من اسمشو DF_Date گذاشتم شما هر اسمی گذاشتی باید نشون بده



نه درExpress یا همون sql برنامvisulal که نیست هیچی در هیچکدوم از مسیرای محل پایگاه هم نیست. اصلا ازم موقع بستن هم نخواست save کنم. ولی با این حال ذخیره شده و ج میده... به هر حال از راهنمایی های مفیدتون که خیلی کمکم کرد ممنون

رزابرنامه یاب
پنج شنبه 26 مرداد 1391, 16:58 عصر
برای این مشکل من این کارو میکنم
Dim dt1 As DateTime=DateTime.Now
Dim dt2 As DateTime= تاریخ دومتو بزار
Dim dayCount As TimeSpam = dt1 - dt2
در قسمت تاریخ اول و دوم هر تاریخی میخوای بزار و با شیء TimeSpam روز، ماه، سال و هر اختلافی بخوای رو بهت میده در این مثال متغیر dayCount بنویس بعد یه دات بزن همه ی مقدارهارو نشونت میده

ببخشید باز یه سوال دیگه... من میخوام تاریخ فعلی رو از یه تاریخی کم کنم و به فاصله ی ساعتش نیاز دارم... هر دو تاریخ شمسی اند..حالا اگه دات بزنم و hour رو انتخاب کنم ، اصلا ساعتو درست حساب نمیکنه، مثلا 3 روز گذشته و با day درست میگه 3 روز اما با hour درست حساب نمیکنه..مگه نه اینکه 3 روز بیشتر از 24 ساعته؟؟!!!!
وقتی میخواد تفاوت ساعتو حساب کنه از روز حاضر همرا ه ساعتش از روز موردنظر با توجه به ساعتش مگه کم نمیکنه؟؟؟!!!
من نیاز دارم بگه اگه بیشتر از 24 یا حالا 12 ساعت شد پیغام خطا بده ... اما ساعته درست نیست...
شما می تونید بازم راهنمایم کنید؟؟ با سپاس فراوان

saeed_sho
پنج شنبه 26 مرداد 1391, 18:39 عصر
نه درExpress یا همون sql برنامvisulal که نیست هیچی در هیچکدوم از مسیرای محل پایگاه هم نیست. اصلا ازم موقع بستن هم نخواست save کنم. ولی با این حال ذخیره شده و ج میده... به هر حال از راهنمایی های مفیدتون که خیلی کمکم کرد ممنون
سعی کنید از نسخه ی دولوپر اس کیو ال استفاده کنید امکاناتش بیشتره
متاسفانه من با نسخه ی اکسپرس کار نکردم

saeed_sho
پنج شنبه 26 مرداد 1391, 18:54 عصر
ببخشید باز یه سوال دیگه... من میخوام تاریخ فعلی رو از یه تاریخی کم کنم و به فاصله ی ساعتش نیاز دارم... هر دو تاریخ شمسی اند..حالا اگه دات بزنم و hour رو انتخاب کنم ، اصلا ساعتو درست حساب نمیکنه، مثلا 3 روز گذشته و با day درست میگه 3 روز اما با hour درست حساب نمیکنه..مگه نه اینکه 3 روز بیشتر از 24 ساعته؟؟!!!!
وقتی میخواد تفاوت ساعتو حساب کنه از روز حاضر همرا ه ساعتش از روز موردنظر با توجه به ساعتش مگه کم نمیکنه؟؟؟!!!
من نیاز دارم بگه اگه بیشتر از 24 یا حالا 12 ساعت شد پیغام خطا بده ... اما ساعته درست نیست... ببینید راه بهتر اینه که شما تاریخو میلادی ذخیره کنید و هر عملیاتی خواستید روش انجام بدید و موقع نمایش تبدیل کنید به شمسی

این کاری که شما میخواید بکنید رو من 9 ماه پیش میخواستم بکنم که بدجوری گرفتارم کرد

اگرم که اصرار دارید تاریخو شمسی ذخیره کنید و کردید اول تبدیلش کنید به میلادی اختلاف ساعتو حساب کنید

fakhravari
جمعه 27 مرداد 1391, 02:14 صبح
خیلی بحث شده سر ساعت.
میتونید از nchar استفاده کنید .
به صورت شمسی ذخیره کنید.
چون کلاس PersianCalendar میتونه تاریخ به میلادی ببره با هر گونه فرمت مثال
1) 1390/12/12
2) 1390/12/12 12:20
,....
بعد برای محاسبات میتوانید برای مثال
نمیخواهید ساعت ثبت نشون بدین > میتوانید با دستور SQL
6 کاراکتر سمت راست را بردارید که میشود تاریخ و بلعکس برای ساعت

رزابرنامه یاب
جمعه 27 مرداد 1391, 11:50 صبح
خیلی بحث شده سر ساعت.
میتونید از nchar استفاده کنید .
به صورت شمسی ذخیره کنید.
چون کلاس PersianCalendar میتونه تاریخ به میلادی ببره با هر گونه فرمت مثال
1) 1390/12/12
2) 1390/12/12 12:20

چطور به میلادی میبره؟ کد یا تابع خاصی هست؟ میشه بفرمایید

fakhravari
جمعه 27 مرداد 1391, 16:46 عصر
چطور به میلادی میبره؟ کد یا تابع خاصی هست؟ میشه بفرمایید
PersianCalendar pc = new PersianCalendar();
pc.ToDateTime(برسی کنید);