PDA

View Full Version : ذخیره تاریخ در sqlite



reza_azizi2010
جمعه 15 آذر 1392, 23:58 عصر
سلام
من وقتی تاریخ رو از سرور میگیرم درسته، توی لاگ درست نمایش میده
اما وتی توی دیتابیس میریزم تاریخا همشون میشن 1981 !
کسی میدونه راهش چیه؟
تاریخ میلادی استفادی میکنم

shahin bahari
شنبه 16 آذر 1392, 14:57 عصر
خوب شما چه طوری تاریخ رو ذخیره میکنید؟!
یه کدی چیزی بزارید که بشه آدم راهنمایی کنه.

reza_azizi2010
شنبه 16 آذر 1392, 17:07 عصر
من تاریخ رو از سرور میگیرم، با json (این تاریخ قبلا توی دیتابیس سرور ذخیره شده)
وقتی تاریخ رو اینسرت میکنم توی دیتابیس گوشی، تاریخا میشه 1981
من گشتم همه جا گفته بودن باید از SimpleDateFormat استفاده بشه که این هم جواب نداد. من این متد رو نوشتم اما این هم جواب نمیده

public String ConvertStringToDate(String date) {
SimpleDateFormat format = new SimpleDateFormat("MMM dd,yyyy hh:mm a");
String date2 = format.format(Date.parse("Your date string"));

return date2;

reza_azizi2010
شنبه 16 آذر 1392, 17:33 عصر
به شکل مرموزی مشکل رفع شد! جل الخالق

saleh92
شنبه 16 آذر 1392, 17:35 عصر
من تاریخ رو از سرور میگیرم، با json (این تاریخ قبلا توی دیتابیس سرور ذخیره شده)
وقتی تاریخ رو اینسرت میکنم توی دیتابیس گوشی، تاریخا میشه 1981
من گشتم همه جا گفته بودن باید از SimpleDateFormat استفاده بشه که این هم جواب نداد. من این متد رو نوشتم اما این هم جواب نمیده

public String ConvertStringToDate(String date) {
SimpleDateFormat format = new SimpleDateFormat("MMM dd,yyyy hh:mm a");
String date2 = format.format(Date.parse("Your date string"));

return date2;




منم همین مشکلو داشتم از این کد استفاده کن مشکلت حل میشه :چشمک:


DateTime dt =new Datetime();
string date=dt.ToString("yyyy-MM-dd")



بعد این متغیر استرینج date رو تو پایگاه دادت ذخیره کن فقط یچیزی این زمان و ذخیره نمیکنه فقط تاریخو دخیره میکنه خودت بهش اضافه کن مثلا اینجوری:


string date=dt.ToString("yyyy-MM-dd hh:mm")

reza_azizi2010
شنبه 16 آذر 1392, 17:44 عصر
البته یه مشکل دیگه هم هست، اونم اینکه تاریخی که من از سرور میگیرم خودش یه استرینگه
من باید تبدیلش کنم به تاریخ محاسبات انجام بدم دوباره تبدیلش کنم به استرینگ و توی دیتابیس لوکال ذخیره کنم

shahin bahari
شنبه 16 آذر 1392, 17:52 عصر
داداش کلا برای ذخیره تاریخ و ساعت استرینگ ذخیره نکنید! از UTC استفاده کنید. ذخیره و کار کردن با یک عدد ساده تر هست. موقع نمایش هم با همون SimpleDateFormat میگی که چطور نمایش داده بشه.

reza_azizi2010
شنبه 16 آذر 1392, 17:54 عصر
مشکل شد دوتا!
حالا این UTC چیه؟!
یه مثال میشه بزنید
راستش من مجبورم بصورت استرینگ بگیرم چون json تاریخ نمیده

shahin bahari
شنبه 16 آذر 1392, 18:05 عصر
مشکل شد دوتا!
حالا این UTC چیه؟!
یه مثال میشه بزنید
راستش من مجبورم بصورت استرینگ بگیرم چون json تاریخ نمیده
خوب UTC تعداد ثانیه های سپری شده از اول ژانویه 1970 میشه.یه عدد صحیح هست که تاریخ و زمان هر روزی رو با دقت 1 ثانیه میتونه برگردونه!
برای تبدیل تاریخ به UTC از این لینک استفاده کنید:
http://www.onlineconversion.com/unix_time.htm
اگه روی سرور با PHP کار میکنید,خروجی تابع time همین UTC هست.تو سمت کلاینت هم با همون کلاس simple dat format میتونید اون رو نمایش بدید.
JSON فقط یه قالب داده هست و براش مهم نیست چه داده ای داخلش هست. برای سادگی عدد رو تبدیل به اسرینگ کنید و به جای اون فرمت قبلی تاریختون بزارید.

reza_azizi2010
شنبه 16 آذر 1392, 18:13 عصر
ممنون
الان من نمیدونم این چرا اینجوری میکنه :
این تاریخیه که از سرور میخونم بصورت متن :
2013-12-10
و بعد ازاینکه به تاریخ تبدیل میشه اینجوری میشه با اینکه فرمت درست بهش دادم :
Tue Dec 10 00:00:00 IRST 2013
اینم متد من :

public static Date ConvertStringToDate(String date) {
Date date2 = null;
SimpleDateFormat dateParser = new SimpleDateFormat("yyyy-MM-dd");

try {
date2 = dateParser.parse(date);
}
catch (ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return date2;

}

آقا شاهین، در مورد تابع تایم میشه بیشتر توضیح بدین. چون من php صفرم!
توضیح اینکه، کاربر قبلا زمان رو بصورت دستی توی دیتابیس سرور ذخیره کرده، حالا چطوری با تابع تایم تبدیلش کنم به utc ؟

shahin bahari
شنبه 16 آذر 1392, 18:44 عصر
قاعدتا این فرمت نباید ساعت رو چاپ کنه. به هر حال قالب "Y-m-d" روامتحان کنید. با توجه به این کد باید قالبی باشه که میخواید:

<?php
$date = new DateTime('2000-01-01');
echo $date->format('Y-m-d H:i:s');
?>
که خروجیش میشه به شکل:
2000-01-01 00:00:00
در مورد تابع تایم هم چیز زیادی نمیشه گفت چون کار پیچیده ای انجام نمیده. هر موقع صداش کنید زمان فعلی سرور رو تو قالب UTC بر میگردونه. خروجیش رو echo کنید تا ببینیدش. فقط timeZone رو حواستون باشه که زمان رو بر اساس کجا میده! هر چی در مورد این تابع هست اینجا توضیح داده شده:
http://www.php.net/function.time
من همیشه از اول تایم رو بر حسب UTC نگه میدارم و پیش نیومده که تبدیلش کنم ولی برای تبدیلش میشه از تابع strtotime توی PHP استفاده کرد. الان اگر همه تاریخ ها ذخیره شده فکر نکنم تبدیلش زیاد توجیه داشته باشه. به هر حال این 2 تا لینک برای این تبدیل:
http://stackoverflow.com/questions/2095703/php-convert-datetime-to-utc
http://php.net/manual/en/function.strtotime.php

reza_azizi2010
شنبه 16 آذر 1392, 23:55 عصر
دوستان میشه بگین چطوری میتونم با کوئری گرفتن رکوردهایی که مثلا 20 روز از تاریخشون گذشته رو پیدا کمنم؟ منظورم 20 روز از تاریخ ایجاد رکورد نیستا 20 روز ، از تاریخی که توی دیتابیس برای هر رکورد ذخیره کردیم
میخام با خود sql رکوردهارو پیدا کنم

reza_azizi2010
یک شنبه 17 آذر 1392, 10:45 صبح
قاعدتا این فرمت نباید ساعت رو چاپ کنه. به هر حال قالب "Y-m-d" روامتحان کنید. با توجه به این کد باید قالبی باشه که میخواید:

<?php
$date = new DateTime('2000-01-01');
echo $date->format('Y-m-d H:i:s');
?>
که خروجیش میشه به شکل:
2000-01-01 00:00:00
در مورد تابع تایم هم چیز زیادی نمیشه گفت چون کار پیچیده ای انجام نمیده. هر موقع صداش کنید زمان فعلی سرور رو تو قالب UTC بر میگردونه. خروجیش رو echo کنید تا ببینیدش. فقط timeZone رو حواستون باشه که زمان رو بر اساس کجا میده! هر چی در مورد این تابع هست اینجا توضیح داده شده:
http://www.php.net/function.time
من همیشه از اول تایم رو بر حسب UTC نگه میدارم و پیش نیومده که تبدیلش کنم ولی برای تبدیلش میشه از تابع strtotime توی PHP استفاده کرد. الان اگر همه تاریخ ها ذخیره شده فکر نکنم تبدیلش زیاد توجیه داشته باشه. به هر حال این 2 تا لینک برای این تبدیل:
http://stackoverflow.com/questions/2095703/php-convert-datetime-to-utc
http://php.net/manual/en/function.strtotime.php

الان دقیقا چه دستوری توی php تاریخ رو بصورت ثانیه میده؟