PDA

View Full Version : متفاوت بودن ساعت هاست با ساعت ایران



mehr83
چهارشنبه 03 تیر 1388, 00:59 صبح
ساعت هاست با ایران متفاوت هست
با چه کدی میتونم این مشکل را حل کنم
( به جز راه حل اضافه یا کم کردن ساعت و دقیقه از ساعت هاست )

----------------------------------------------------------------------
فروش ويژه مجموعه كامل محصولات آموزش برنامه نويسي AppDev
Asp.NET , Visual Basic.NET , Visual C#.NET , SQL Server 2008 , Web Service , LINQ , Html , Xml , SharePoint
اطلاعات بيشتر در
http://sadrasystem.org (http://sadrasystem.org/)

m.hamidreza
چهارشنبه 03 تیر 1388, 08:39 صبح
http://msdn.microsoft.com/en-us/library/system.datetime.aspx

silverfox
چهارشنبه 03 تیر 1388, 09:48 صبح
می تونی ساعتش رو به gmt تبدیل کنی بعد اختلاف ساعت تهران یا هرجایی که می خوای رو بهش اضافه کنی


DateTime.UtcNow.AddMinutes(210)

hobab-theme
چهارشنبه 03 تیر 1388, 11:06 صبح
می تونی ساعتش رو به gmt تبدیل کنی بعد اختلاف ساعت تهران یا هرجایی که می خوای رو بهش اضافه کنی


DateTime.UtcNow.AddMinutes(210)

مشه لطفاً بیشتر توضیح بدید
اون عدد 210 چیه؟
کلاً طرز استفاده از اینو بگید
ممنون

silverfox
چهارشنبه 03 تیر 1388, 11:40 صبح
الان با datetime زمان و تاریخ سرور رو گرفتم و بعد با utcnow به universal یا همون گرینویچ تبدیل کردم 210 دقیقه هم همون 3ساعت و نیمه که تهران از گرینویچ جلوتره

hobab-theme
پنج شنبه 04 تیر 1388, 00:15 صبح
و بعد با utcnow به universal یا همون گرینویچ تبدیل کردم
پس با این وجود دیگه فرقی نمیکنه که هاستمون رو چه دیتاسنتری و تو چه کشوری باشه . چون به هر حال ساعت با گرینویچ ست میشه؟؟
درسته؟؟
در ضمن از شما میخوام که یه سری هم به این تاپیک بزنید . موضوعش خیلی با این تاپیک فرق نمیکنه
http://barnamenevis.org/forum/showthread.php?t=164553
ممنون

hobab-theme
جمعه 05 تیر 1388, 21:43 عصر
می تونی ساعتش رو به gmt تبدیل کنی بعد اختلاف ساعت تهران یا هرجایی که می خوای رو بهش اضافه کنی


DateTime.UtcNow.AddMinutes(210)

دوست من این کد شما دقیقاً یه ساعت عقبتر رو نشون میده
من اون کد رو به صورت زیر تغییر دادم و اختلاف زمان یک ساعت جبران شد

<%=DateTime.UtcNow.AddHours(+4.5).ToString("HH:mm")%>
ولی خوب ساعت تهران باید رو +3.5 ساعت یا همون 210 دقیقه باشه . تو این کد من مجبور شدم اون رو روی 4 ساعت و نیم تنظیم کنم تا جواب بگیرم
نظر شما راجع به این مشکل چیه؟
-------
در ضمن تمام ساعتهای خونه ما تنظیمه و مشکل از اونا نیست:لبخند:

silverfox
شنبه 06 تیر 1388, 11:11 صبح
*بله با این کد مهم نیست سرور کجاست البته می شد ساعت سرور رو گرفت و دستی اختلاف رو حساب کرد ولی این راحت تره...
*در واقع این 1 ساعتی که ما برای کوتاه شدن روز ها و اینا جا به جا می کنیم قرار داد خودمون هست ولی اختلاف ما با گرینویچ همان 3:30 است تو خود ساعت ویندوز هم نگاه کنید +3:30 هست تهران...فکر کنم اول مهر ساعت ها می رن سر جای اولشون درست میشه 3:30+

kamrannazari
شنبه 06 تیر 1388, 11:27 صبح
من يك تابع براي اين كار نوشتم كه فكر كنم بشه راحت ازش استفاده كرد. البته قبلش بايد تفاوت ساعت سرور هاست رو بگريد كه اونم خيلي ساده هست. بعد توي اين تابع ازش استفاده كنيد.
public static string shamsi(int g_y1, int g_m1, int g_d1, string FormatDate)
{


byte[] g_days_in_month = new byte[] { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
byte[] j_days_in_month = new byte[] { 31, 31, 31, 31, 31, 31, 30, 30, 30, 30, 30, 29 };

int g_y = 0;
int g_m = 0;
int g_d = 0;
string hh = "";
string mmm = "";


string r = FormatDate;
if ((g_y1 <= 0))
{
g_y = DateTime.Now.AddMinutes(nazari.timediff()).Year;
g_m = DateTime.Now.AddMinutes(nazari.timediff()).Month;
g_d = DateTime.Now.AddMinutes(nazari.timediff()).Day;
hh = DateTime.Now.AddMinutes(nazari.timediff()).Hour.To String();
mmm = DateTime.Now.AddMinutes(nazari.timediff()).Minute. ToString();
}
else
{
g_y = g_y1;
g_m = g_m1;
g_d = g_d1;
hh = DateTime.Now.Hour.ToString();
mmm = DateTime.Now.Minute.ToString();
}


int gy = g_y - 1600;
int gm = g_m - 1;
int gd = g_d - 1;
int g_day_no = 365 * gy + nazari.div((gy + 3), 4) - nazari.div((gy + 99), 100) + nazari.div((gy + 399), 400);
int i;
for (i = 0; i < gm; ++i)
g_day_no += g_days_in_month[i];
if (gm > 1 && ((gy % 4 == 0 && gy % 100 != 0) || (gy % 400 == 0)))
g_day_no++;

g_day_no += gd;
int j_day_no;
j_day_no = g_day_no - 79;

int j_np = nazari.div(j_day_no, 12053);
j_day_no = j_day_no % 12053;


int jy = 979 + 33 * j_np + 4 * nazari.div(j_day_no, 1461);
j_day_no %= 1461;

if (j_day_no >= 366)
{
jy += nazari.div(j_day_no - 1, 365);
j_day_no = (j_day_no - 1) % 365;
}

for (i = 0; i < 11 && j_day_no >= j_days_in_month[i]; ++i)
j_day_no -= j_days_in_month[i];
int jm = i + 1;
int jd = j_day_no + 1;

string yy = jy.ToString();
string mm = jm.ToString();
string dd = jd.ToString();
if (mmm.Length == 1)
r = r.Replace("MM", "0" + mmm);
else r = r.Replace("MM", mmm);

r = r.Replace("M", mmm);

if (hh.Length == 1)
r = r.Replace("hh", "0" + hh);
else r = r.Replace("hh", hh);
r = r.Replace("h", hh);

if (dd.Length == 1)
r = r.Replace("dd", "0" + dd);
else r = r.Replace("dd", dd);
r = r.Replace("d", dd);

if (mm.Length == 1)
r = r.Replace("mm", "0" + mm);
else r = r.Replace("mm", mm);
r = r.Replace("m", mm);
r = r.Replace("yyyy", yy);
r = r.Replace("yy", yy.Substring(2, 2));

return r;
}

public static int timediff()
{

return 0;// (4 * 60) + 30;
}

تفاوت ساعت رو به دقيقه بنويسيد
بعد براي استافده مثلا مي تونيد اينطوري بنويسيد
label1.text=shamsi(2009,6,6,"yy/mm/dd hh:MM")
توجه داشته باشيد كه MM مربوط به ساعت حتما بايد با حروف بزرگ باشد

silverfox
شنبه 06 تیر 1388, 11:50 صبح
برای 3 تا شهر درست کردم...
از ddl با انتخاب شهر اختلاف زمانی رو می خونه و به گرینویچ اضافه می کنه...

hobab-theme
شنبه 06 تیر 1388, 21:10 عصر
برای 3 تا شهر درست کردم...
از ddl با انتخاب شهر اختلاف زمانی رو می خونه و به گرینویچ اضافه می کنه...
مرسی عزیز
دستت درد نکنه . انشاالله یک در دنیا و صد در آخرت خیرش رو ببینی:چشمک:
از دوست گلم آقا کامران هم تشکر میکنم
دست همتون درد نکنه

hobab-theme
دوشنبه 08 تیر 1388, 11:00 صبح
دوستان لطف کنن هر از گاهی یه پست به این تاپیک بفرستن تا عزیزان دیگه هم ببینن و ازش بهره ببرن
ممنون
به زودی یه کامپوننت واسش مینویسم تا تمام شهرها رو پوشش بده
یا حق

mehr83
دوشنبه 08 تیر 1388, 18:31 عصر
خوب برای تاریخ چه کاری انجام بدیم؟

----------------------------------------------------------------------
فروش ويژه مجموعه كامل محصولات آموزش برنامه نويسي AppDev
Asp.NET , Visual Basic.NET , Visual C#.NET , SQL Server 2008 , Web Service , LINQ , Html , Xml , SharePoint
اطلاعات بيشتر در
http://sadrasystem.org (http://sadrasystem.org/)

silverfox
دوشنبه 08 تیر 1388, 20:39 عصر
تاریخ اگه به یک روز قبل یا بعد بره خود دات نت درستش می کنه تا اونجا که من دیدم...

hobab-theme
دوشنبه 08 تیر 1388, 21:32 عصر
تاریخ اگه به یک روز قبل یا بعد بره خود دات نت درستش می کنه تا اونجا که من دیدم...
لطفاً یکم بیشتر توضیح بدید!!!:متفکر:

silverfox
دوشنبه 08 تیر 1388, 22:00 عصر
یعنی الان تهران ساعت 1:00 AM هست و امروز 2009/6/28 ولی تو فلان شهر که 3 ساعت از ما عقب تره ساعت 10:00 PM هست روز 2009/6/27 وقتی با دات نت با addhours 3 ساعت کم می کنی خودش Date رو هم تغییر می ده به 27م

hobab-theme
دوشنبه 08 تیر 1388, 22:08 عصر
یعنی الان تهران ساعت 1:00 AM هست و امروز 2009/6/28 ولی تو فلان شهر که 3 ساعت از ما عقب تره ساعت 10:00 PM هست روز 2009/6/27 وقتی با دات نت با addhours 3 ساعت کم می کنی خودش Date رو هم تغییر می ده به 27م
آها منظورتون این بود
ممنون عزیزم

محمد متاله
جمعه 01 مهر 1390, 22:28 عصر
می تونی ساعتش رو به gmt تبدیل کنی بعد اختلاف ساعت تهران یا هرجایی که می خوای رو بهش اضافه کنی


DateTime.UtcNow.AddMinutes(210)


به نظرم این کد درسته فقط باید DateTime.UtcNow را ابتدا به شمسی برگردانید اگه ماه آن در شش ماه اول سال هست 270 و اگر که در شش ماه دوم هست 210 را طبق قطعه کد بالا اضافه کنید.

golihaghighi
چهارشنبه 06 مهر 1390, 20:20 عصر
با این کد دیگه daylightsaving یا همون یک ساعت اختلاف شش ماه اول هم خودش محاسبه میکنه تاریخها رو هم درست محاسبه میکنه

BirthDate = TimeZoneInfo.ConvertTimeBySystemTimeZoneId(DateTim e.Now, TimeZoneInfo.Utc.Id, "Iran Standard Time")