PDA

View Full Version : سوال: نمایش ساعت و تاریخ به صورت web server و TimeZone هم زمان



davidrobert
یک شنبه 07 شهریور 1395, 16:39 عصر
سلام و خسته نباشید من میخوام تاریخ و زمان نمایش بدم اگه کاربر به اینترنت وصل بود زمان از اینترنت بگیره نمایش بده و وقتی به اینترنت وصل نبود از سیستم بگیره نمایش بده ، الان این کد درست کار میکنه و وقتی به اینترنت وصل میشه زمان و تاریخ درست نمایش میده ولی وقتی ارتباط با اینترنت قطع میشه دستور else if اجرا نمیشه و تاریخ سیستم نمایش نمیده و باعث بروز خطا در برنامه میشه.
public string GetNistTime(DateTime _GetNistTime)
{
DateTime dateTime = DateTime.MinValue;
HttpWebRequest request =
(HttpWebRequest)WebRequest.Create("http://nist.time.gov/actualtime.cgi?lzbc=siqm9b");
request.Method = "GET";
request.Accept = "text/html, application/xhtml+xml, */*";
request.UserAgent = "Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.1; Trident/6.0)";
request.ContentType = "application/x-www-form-urlencoded";
request.CachePolicy = new RequestCachePolicy(RequestCacheLevel.NoCacheNoStor e); //No caching
HttpWebResponse response = (HttpWebResponse)request.GetResponse();

if (response.StatusCode == HttpStatusCode.OK)
{
StreamReader stream = new StreamReader(response.GetResponseStream());
string html = stream.ReadToEnd();
//<timestamp time=\"1395772696469995\" delay=\"1395772696469995\"/>
string time = Regex.Match(html, @"(?<=\btime="")[^""]*").Value;
double milliseconds = Convert.ToInt64(time) / 1000.0;
dateTime = new DateTime(1970, 1, 1).AddMilliseconds(milliseconds).ToLocalTime();
}
else if (response.StatusCode!=HttpStatusCode.OK)
{
TimeZoneInfo timeZoneInfo;
timeZoneInfo = TimeZoneInfo.FindSystemTimeZoneById("Iran Standard Time");
dateTime = TimeZoneInfo.ConvertTime(DateTime.Now, timeZoneInfo);
return dateTime.ToString("yyyy-MM-dd");
}
return dateTime.ToString();
}
کد در این قسمت خطا میده اگه اینترنت نباشه.

HttpWebResponse response = (HttpWebResponse)request.GetResponse();

و خطا remote connection web server میده
ممنون میشم بهم بگید چطوری هر جفتشون داشته باشم در صورت نبودن اینترنت سویچ کنم رو سرویس بعدی

Mahmoud.Afrad
یک شنبه 07 شهریور 1395, 20:07 عصر
چک کنید به اینترنت دسترسی دارید یا نه
public DateTime GetDateTime()
{
DateTime dateTime;
if (IsConnectedToInternet())
{
XmlDocument document = new XmlDocument();
document.Load("http://nist.time.gov/actualtime.cgi?lzbc=siqm9b");
if (document.DocumentElement != null)
{
var timeAttribute = document.DocumentElement.GetAttributeNode("time");
if (timeAttribute != null && timeAttribute.Value != null)
{
string time = timeAttribute.Value;
long milliseconds = Convert.ToInt64(time)/1000;
dateTime = new DateTime(1970, 1, 1).AddMilliseconds(milliseconds).ToLocalTime();
return dateTime;
}
}
}

var timeZoneInfo = TimeZoneInfo.FindSystemTimeZoneById("Iran Standard Time");
dateTime = TimeZoneInfo.ConvertTime(DateTime.Now, timeZoneInfo);
return dateTime;
}

[DllImport("wininet.dll")]
private static extern bool InternetGetConnectedState(out int description, int reservedValue);

public bool IsConnectedToInternet()
{
bool flag;
int desc;
flag = InternetGetConnectedState(out desc, 0);
return flag;
}

davidrobert
سه شنبه 09 شهریور 1395, 14:20 عصر
ممنون بابت جواب دادنتون ، به وسیله شما مشکل انیترنت بودن نبودن حل شود که برحسب اینترنت بودن و یا نبودن تاریخ و زمان نشان بده. فقط وقتی اینترنت قطع میشه برنامه یه هنگ میکنه و یا وقتی اینترنت وصل میشه برنامه تو هر دو حالت هنگ میکنه یه این ایراد داره اما اگه یه سره اینترنت یاشه و یا غیر اینترنت باشه برنامه هنگ نمیکنه فقط در هنگام اجرا قطع بشه اینترنت و یا اینترنت باشه برنامه هنگ میکنه و دومی کاری که میخوام انجام بدم تاریخ جداگانه نمایش بدم و همین طور زمان هم جداگانه نمایش بدم همه کار میکنم جواب نمی گیرم ممنون میشم بابت کد بالا من رو راهنمایی کنید. چطور فقط تاریخ نمایش بدم تو یک Label و تو Label دوم فقط تاریخ یعنی این 2 تا با هم نباشه.

چک کنید به اینترنت دسترسی دارید یا نه
public DateTime GetDateTime()
{
DateTime dateTime;
if (IsConnectedToInternet())
{
XmlDocument document = new XmlDocument();
document.Load("http://nist.time.gov/actualtime.cgi?lzbc=siqm9b");
if (document.DocumentElement != null)
{
var timeAttribute = document.DocumentElement.GetAttributeNode("time");
if (timeAttribute != null && timeAttribute.Value != null)
{
string time = timeAttribute.Value;
long milliseconds = Convert.ToInt64(time)/1000;
dateTime = new DateTime(1970, 1, 1).AddMilliseconds(milliseconds).ToLocalTime();
return dateTime;
}
}
}

var timeZoneInfo = TimeZoneInfo.FindSystemTimeZoneById("Iran Standard Time");
dateTime = TimeZoneInfo.ConvertTime(DateTime.Now, timeZoneInfo);
return dateTime;
}

[DllImport("wininet.dll")]
private static extern bool InternetGetConnectedState(out int description, int reservedValue);

public bool IsConnectedToInternet()
{
bool flag;
int desc;
flag = InternetGetConnectedState(out desc, 0);
return flag;
}

Mahmoud.Afrad
سه شنبه 09 شهریور 1395, 23:27 عصر
برای تاریخ، در مورد تبدیل تاریخ میلادی به شمسی جستجو کنید.
برای زمان، میتونید از متدهای کلاس DateTime استفاده کنید.

davidrobert
سه شنبه 09 شهریور 1395, 23:42 عصر
برای تاریخ، در مورد تبدیل تاریخ میلادی به شمسی جستجو کنید.
برای زمان، میتونید از متدهای کلاس DateTime استفاده کنید.
سلام آقا Mahmoud.Afrad (http://barnamenevis.org/member.php?71297-Mahmoud-Afrad)
این کدی که دادید درست همونی که میخوام با این تفاوت که نمیخوام تاریخ و زمان با هم باشه فقط تاریخ میخوام جدا. و یه نمونه مثل این زمان رو میخوام جدا .
یعنی تاریخ زمان پیش هم نباشن بخاطر ثبت کردن اطلاعات چون تاریخ و زمان جداگانه ثبت میشن.

davidrobert
چهارشنبه 10 شهریور 1395, 15:15 عصر
سلام آقا Mahmoud.Afrad (http://barnamenevis.org/member.php?71297-Mahmoud-Afrad)
به این صورت جواب گرفتم ممنون بابت کمکتان

public string GetDateTime(DateTime _getDateTime)
{
DateTime dateTime;
if (IsConnectedToInternet())
{
XmlDocument document = new XmlDocument();
document.Load("http://nist.time.gov/actualtime.cgi?lzbc=siqm9b");
if (document.DocumentElement != null)
{
var timeAttribute = document.DocumentElement.GetAttributeNode("time");
if (timeAttribute != null && timeAttribute.Value != null)
{
string time = timeAttribute.Value;
long milliseconds = Convert.ToInt64(time) / 1000;
dateTime = new DateTime(1970, 1, 1).AddMilliseconds(milliseconds).ToLocalTime();
return dateTime.ToString("yyyy-mm-dd");
}
}
}

var timeZoneInfo = TimeZoneInfo.FindSystemTimeZoneById("Iran Standard Time");
dateTime = TimeZoneInfo.ConvertTime(DateTime.Now, timeZoneInfo);
return dateTime.ToString("yyyy-mm-dd");
}

[DllImport("wininet.dll")]
private static extern bool InternetGetConnectedState(out int description, int reservedValue);

public bool IsConnectedToInternet()
{
bool flag;
int desc;
flag = InternetGetConnectedState(out desc, 0);
return flag;
}

davidrobert
پنج شنبه 11 شهریور 1395, 22:19 عصر
سلام آقا Mahmoud.Afrad (http://barnamenevis.org/member.php?71297-Mahmoud-Afrad)
شرمنده مزاحم شما میشم.
کد بالا که برای تاریخ روز که از اینترنت بگیره یه مشکل کوچک برخورد کردم ویندوز لپ تاپ من 10 هستش و تاریخ سیستم شمسی هم و تاریخ شمسی به من نشان میداد متوجه نبودم سیستم خودش تاریخ میلادی رو میگیره و تبدیل به شمسی میکنه الان تو ویندوز کامپیوتر خانه که 7 هستش آمدم باقی کد نویسی انجام بدم دیدم تاریخ میلادی داره ثبت میکنه آیا مقداری قابل تغییر داره که تاریخ شمسی نمایش بده و ثبت کنم. ممنون میشم کمک کنید بنده رو با تشکر

Mahmoud.Afrad
پنج شنبه 11 شهریور 1395, 23:09 عصر
چرا تاریخ و زمان رو جدا و به صورت رشته ذخیره می کنید؟

davidrobert
پنج شنبه 11 شهریور 1395, 23:15 عصر
چرا تاریخ و زمان رو جدا و به صورت رشته ذخیره می کنید؟

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

Mahmoud.Afrad
جمعه 12 شهریور 1395, 00:02 صبح
متوجه توضیحاتت نشدم.
تاریخ رو به شمسی ذخیره میکنید؟ چرا؟
چرا به میلادی ذخیره نمیکنید؟ در اینصورت خروجی متد GetDateTime که از نوع DateTime هست رو در دیتابیس ذخیره میکنید. در اینصورت برای جستجو ، کافیه تاریخ شمسی رو به میلادی تبدیل کرده و جستجو کنید.

davidrobert
جمعه 12 شهریور 1395, 00:07 صبح
متوجه توضیحاتت نشدم.
تاریخ رو به شمسی ذخیره میکنید؟ چرا؟
چرا به میلادی ذخیره نمیکنید؟ در اینصورت خروجی متد GetDateTime که از نوع DateTime هست رو در دیتابیس ذخیره میکنید. در اینصورت برای جستجو ، کافیه تاریخ شمسی رو به میلادی تبدیل کرده و جستجو کنید.
من هم شمسی ذخیره میکنم و هم میلادی و به کل با شمسی نشان میدم ولی تبادلات با میلادی انجام میدم بخاطر همین میخوام از اینترنت تاریخ روز شمسی نشان داده بشه نه میلادی

Mahmoud.Afrad
جمعه 12 شهریور 1395, 01:50 صبح
با این عملی که انجام دادید حجم و افزونگی داده بالا خواهد بود و البته منطقی هم نیست. وقتی تاریخ میلادی ذخیره میکنید دیگه نیازی به تاریخ شمسی ندارید. هر وقت نیاز بود به شمسی تبدیل کنید.


ولی به هر حال؛ برای بدست آوردن تاریخ شمسی باید تبدیل صورت بگیره و تا دلتون بخواد این مطلب قبلا پرسیده شده. ولی باز هم کد قرار میدم. (اگر روز و ماه دو رقمی باشه دیگه نیازی به ذخیره / هم نخواهد بود و میتونید اسلش ها رو هم حذف کنید)
public class PersianDate
{
public static string GetShortDateString()
{
DateTime dateTime = GetDateTime();
return ShortPersianDate(dateTime);
}

public static string GetShortTimeString()
{
DateTime dateTime = GetDateTime();
return dateTime.ToShortTimeString();
}

public static string GetLongTimeString()
{
DateTime dateTime = GetDateTime();
return dateTime.ToLongTimeString();
}

public static string GetLongDateString()
{
DateTime dateTime = GetDateTime();
return ShortPersianDate(dateTime) + " " + dateTime.ToLongTimeString();
}

private static string ShortPersianDate(DateTime dateTime)
{
PersianCalendar persianCalendar = new PersianCalendar();
return persianCalendar.GetYear(dateTime)
+ "/" + persianCalendar.GetMonth(dateTime).ToString("00")
+ "/" + persianCalendar.GetDayOfMonth(dateTime).ToString("00");
}

private static DateTime GetDateTime()
{
DateTime dateTime;
if (IsConnectedToInternet())
{
XmlDocument document = new XmlDocument();
document.Load("http://nist.time.gov/actualtime.cgi?lzbc=siqm9b");
if (document.DocumentElement != null)
{
var timeAttribute = document.DocumentElement.GetAttributeNode("time");
if (timeAttribute != null && timeAttribute.Value != null)
{
string time = timeAttribute.Value;
long milliseconds = Convert.ToInt64(time)/1000;
dateTime = new DateTime(1970, 1, 1).AddMilliseconds(milliseconds).ToLocalTime();
return dateTime;
}
}
}

var timeZoneInfo = TimeZoneInfo.FindSystemTimeZoneById("Iran Standard Time");
dateTime = TimeZoneInfo.ConvertTime(DateTime.Now, timeZoneInfo);
return dateTime;
}

[DllImport("wininet.dll")]
private static extern bool InternetGetConnectedState(out int description, int reservedValue);

private static bool IsConnectedToInternet()
{
int desc;
bool flag = InternetGetConnectedState(out desc, 0);
return flag;
}
}

davidrobert
جمعه 12 شهریور 1395, 10:32 صبح
با این عملی که انجام دادید حجم و افزونگی داده بالا خواهد بود و البته منطقی هم نیست. وقتی تاریخ میلادی ذخیره میکنید دیگه نیازی به تاریخ شمسی ندارید. هر وقت نیاز بود به شمسی تبدیل کنید.


ولی به هر حال؛ برای بدست آوردن تاریخ شمسی باید تبدیل صورت بگیره و تا دلتون بخواد این مطلب قبلا پرسیده شده. ولی باز هم کد قرار میدم. (اگر روز و ماه دو رقمی باشه دیگه نیازی به ذخیره / هم نخواهد بود و میتونید اسلش ها رو هم حذف کنید)
public class PersianDate
{
public static string GetShortDateString()
{
DateTime dateTime = GetDateTime();
return ShortPersianDate(dateTime);
}

public static string GetShortTimeString()
{
DateTime dateTime = GetDateTime();
return dateTime.ToShortTimeString();
}

public static string GetLongTimeString()
{
DateTime dateTime = GetDateTime();
return dateTime.ToLongTimeString();
}

public static string GetLongDateString()
{
DateTime dateTime = GetDateTime();
return ShortPersianDate(dateTime) + " " + dateTime.ToLongTimeString();
}

private static string ShortPersianDate(DateTime dateTime)
{
PersianCalendar persianCalendar = new PersianCalendar();
return persianCalendar.GetYear(dateTime)
+ "/" + persianCalendar.GetMonth(dateTime).ToString("00")
+ "/" + persianCalendar.GetDayOfMonth(dateTime).ToString("00");
}

private static DateTime GetDateTime()
{
DateTime dateTime;
if (IsConnectedToInternet())
{
XmlDocument document = new XmlDocument();
document.Load("http://nist.time.gov/actualtime.cgi?lzbc=siqm9b");
if (document.DocumentElement != null)
{
var timeAttribute = document.DocumentElement.GetAttributeNode("time");
if (timeAttribute != null && timeAttribute.Value != null)
{
string time = timeAttribute.Value;
long milliseconds = Convert.ToInt64(time)/1000;
dateTime = new DateTime(1970, 1, 1).AddMilliseconds(milliseconds).ToLocalTime();
return dateTime;
}
}
}

var timeZoneInfo = TimeZoneInfo.FindSystemTimeZoneById("Iran Standard Time");
dateTime = TimeZoneInfo.ConvertTime(DateTime.Now, timeZoneInfo);
return dateTime;
}

[DllImport("wininet.dll")]
private static extern bool InternetGetConnectedState(out int description, int reservedValue);

private static bool IsConnectedToInternet()
{
int desc;
bool flag = InternetGetConnectedState(out desc, 0);
return flag;
}
}

دوست عزیز بابت صحبتی که کردید نمونه سورسی دارید با ADO بهم بدید ممنون میشم این سورس هم میلادی به نشان داد نه شمسی از سیستم شمسی میخونه

davidrobert
یک شنبه 14 شهریور 1395, 15:30 عصر
سلام و خسته نباشید من کد نوشتم برای بررسی تاریخ از وب سرور که اگه تاریخ سیستم اشتباه بود سیستم اصلاح کنه تاریخ رو و تاریخ صحیح رو نمایش بده از وب سرور در برنامه در صورت بودن اینترنت ولی اگر اینترنت نبود سیستم تاریخ خود سیستم رو وارد کنه الان با این مسئله مشکلی ندارم کدش این می باشد.

public DateTime GetDateTime()
{
DateTime dateTime;
if (IsConnectedToInternet())
{
XmlDocument document = new XmlDocument();
document.Load("http://nist.time.gov/actualtime.cgi?lzbc=siqm9b");
if (document.DocumentElement != null)
{
var timeAttribute = document.DocumentElement.GetAttributeNode("time");
if (timeAttribute != null && timeAttribute.Value != null)
{
string time = timeAttribute.Value;
long milliseconds = Convert.ToInt64(time)/1000;
dateTime = new DateTime(1970, 1, 1).AddMilliseconds(milliseconds).ToLocalTime();
return dateTime;
}
}
}

var timeZoneInfo = TimeZoneInfo.FindSystemTimeZoneById("Iran Standard Time");
dateTime = TimeZoneInfo.ConvertTime(DateTime.Now, timeZoneInfo);
return dateTime;
}

[DllImport("wininet.dll")]
private static extern bool InternetGetConnectedState(out int description, int reservedValue);

public bool IsConnectedToInternet()
{
bool flag;
int desc;
flag = InternetGetConnectedState(out desc, 0);
return flag;
}



این کد کار میکنه و درست نشان میده تاریخ رو از اینترنت که توسط آقا Mahmoud.Afrad (http://barnamenevis.org/member.php?71297-Mahmoud-Afrad) کمک شده ولی مسئله اصلی سر محاسبه تاریخ هستش . یعنی اگه در ویندوز 10 تاریخ شمسی بود سیستم تاریخ رو میاد از میلادی تبدیل کنه چون تاریخ خود سیستم شمسی میاد شمسی به شمسی تبدیل میکنه به نعبه که فکر میکنه تاریخ سیستم میلادی می باشد و به شمسی تبدیل میکنه و سال 1395/06/14 رو میاد 774/05/07 نشان میده و کلی تو ثبت اطلاعات با تاریخ نا صحیح با مشکل بر خورد میکنیم اگه از ویندوز 10 به پایین شمسی نداریم تاریخ به کل میلادی می باشد و میاد درست تاریخ میلادی به شمسی تبدیل میشه و به تاریخ امروز نمایش داده میشه ولی در ویندوز 10 کلا کار ها خراب میشود برای ثبت صحیح تاریخ هتا به صورت اینترنتی ممنون میشم راهنمایی کنید.

Mahmoud.Afrad
یک شنبه 14 شهریور 1395, 15:36 عصر
این کد مشکلی نداره. شما کد ثبت و واکشی اطلاعات از دیتابیس رو قرار بده. ساختار جدولتون رو هم مشخص کنید.

davidrobert
یک شنبه 14 شهریور 1395, 15:43 عصر
این کد مشکلی نداره. شما کد ثبت و واکشی اطلاعات از دیتابیس رو قرار بده. ساختار جدولتون رو هم مشخص کنید.
بله این کد مشکلی نداره. مشکل من تو نمایش تاریخ صحیح هستش چون تاریخ سیستم شمسی و میاد از اینترنت تاریخ به روز شمسی میگیره بر میداره تاریخ شمسی میلادی در نظر میگره و وقتی تبدیل میکنه تاریخ شمسی رو به تاریخ خیلی پرتی مثل 774/05/0 تبدیل میشه یعنی تاریخ 1000 سالش میره این به باگ بزرگ هستش برای بررسی این مشکل ماندم

sajaaaaad
یک شنبه 14 شهریور 1395, 15:51 عصر
خب سال تاریخ رو چک کن اگر از 2000 بیشتر بود تبدیلش کن اگر کمتر بود یک هشدار بده بگو تاریخ خیلی قدیمی می باشد، آیا تاریخ شمسی است.!؟ اگر گفت آره که تغیرش نده وگرنه تغیرش بده به شمسی.!

Mahmoud.Afrad
یک شنبه 14 شهریور 1395, 15:58 عصر
باگ مربوط به کدنویسی شماست. ببینید وقتی تاریخ میلادی(نوع DateTime) هست به شمسی تبدیل کنید و نمایش بدید. اگر تاریخ شمسی هست(به صورت شمسی از کاربر میگیرید) دیگه تبدیل نیاز نداره ولی برای ذخیره میتونید به میلادی(DateTime) تبدیل و ذخیره کنید..

شما کدی که نوشتی رو بزار تا کمکت کنیم. اگر میتونی یک پروژه تست بزاری که همین مشکل رو داره هم خوبه.

davidrobert
یک شنبه 14 شهریور 1395, 17:43 عصر
خب سال تاریخ رو چک کن اگر از 2000 بیشتر بود تبدیلش کن اگر کمتر بود یک هشدار بده بگو تاریخ خیلی قدیمی می باشد، آیا تاریخ شمسی است.!؟ اگر گفت آره که تغیرش نده وگرنه تغیرش بده به شمسی.!

دوست عزیزی نمونه کدی بابت این موضوع دارید مغزم هنگ هیچ جوری بابت این تاریخ مغزم کار نمیکنه و دارم قاطی میکنم. ممنون میشم کدی بابت این موضوع بهم بدید.

davidrobert
یک شنبه 14 شهریور 1395, 18:01 عصر
خب سال تاریخ رو چک کن اگر از 2000 بیشتر بود تبدیلش کن اگر کمتر بود یک هشدار بده بگو تاریخ خیلی قدیمی می باشد، آیا تاریخ شمسی است.!؟ اگر گفت آره که تغیرش نده وگرنه تغیرش بده به شمسی.!
این کد نوشتم برای فرستادن تارین آنلاین در هر صورت میلادی دوستان راهی هستش اگه سیستم شمسی بود اون میلادی رو نشان بده. ممنون میشم سورسی قرار بدید به صورت آنلاین به کل تاریخ میلادی نشان بده.
http://s7.picofile.com/file/8266257118/ChackDateCorrect.7z.html

davidrobert
دوشنبه 15 شهریور 1395, 15:51 عصر
حالا دوستان کدی برای بررسی وضعیت تاریخ شمسی و میلادی نداره ببینه تاریخ شمسی هستش بکنه میلادی اگه تاریخ میلادی هستش ثابت میلادی بمونه به صورت آنلاین این کد به کل میلادی رو میاره به صورت محلی
این سورس
http://s7.picofile.com/file/8266257118/ChackDateCorrect.7z.html
هستش
خواهشن یکی میتونه کمک کنه به صورت اینترنتی تاریخ فقط میلادی بگیره باقیش تبدیل کد میلادی به شمسی رو دارم.

sajaaaaad
دوشنبه 15 شهریور 1395, 16:31 عصر
سلام من وقت نکردم دقیق تست کنم یا برنامه تو نگا کنم. ببین این به درد میخوره.
توی یک فرم بذار یک دکمه و اینارو بهش اضافه کن



using System.Globalization;

//Fields...******************************
private int YearValue;
//Events.....**************************************
private void button1_Click(object sender, EventArgs e)
{
YearValue = Int32.Parse(DateTime.Now.ToString("yyyy"));


if (YearValue < 2000)
{
DateTime temp = ToGregorianDateTime(DateTime.Now.ToString("dd/MM/yyyy"));
MessageBox.Show(temp.ToString());
}
else
{
MessageBox.Show(DateTime.Now.ToString("dd/MM/yyyy"));
}
}


//Functions.................
private static DateTime ToGregorianDateTime(string PersianDateTime)
{
GregorianCalendar GC = new GregorianCalendar();
string[] YMD = PersianDateTime.Split('/');
return (new DateTime(Convert.ToInt32(YMD[0]), Convert.ToInt32(YMD[1]), Convert.ToInt32(YMD[2]), new PersianCalendar()));
}

davidrobert
دوشنبه 15 شهریور 1395, 18:26 عصر
دسته تون درد نکونه بابت این تاریخ نتونستم جلو شو بگیرم روی شمسی رفت و تاریخ پایین تر از 2000 رو آورد برای شمسی رو
ببنید خودتون چطوری میتوانم اگه میلادی رو نیاورد بره روی شمسی
public string datetime(DateTime _dateTime)
{
DateTime dateTime = DateTime.Now;
DateTime date1 = new DateTime();
if (IsConnectedToInternet())
{
if (date1.Year > 2000)
{
XmlDocument document = new XmlDocument();
document.Load("http://nist.time.gov/actualtime.cgi?lzbc=siqm9b");
if (document.DocumentElement != null)
{
var timeAttribute = document.DocumentElement.GetAttributeNode("time");
if (timeAttribute != null && timeAttribute.Value != null)
{
string time = timeAttribute.Value;
long milliseconds = Convert.ToInt64(time) / 1000;
date1 = new DateTime(1970, 1, 1).AddMilliseconds(milliseconds).ToLocalTime();
return date1.ToString("yyyy-mm-dd");
}
}
}
else
{
string date2 = dateTime.Year + "-" + dateTime.Month + "-" + dateTime.Day;
return date2.ToString();
}
}
// PersianCalendar pc = new PersianCalendar();


string date = dateTime.Year + "-" + dateTime.Month + "-" + dateTime.Day;
return date.ToString();
}
[DllImport("wininet.dll")]
private static extern bool InternetGetConnectedState(out int description, int reservedValue);
private static DateTime ToGregorianDateTime(string PersianDateTime)
{
GregorianCalendar GC = new GregorianCalendar();
string[] YMD = PersianDateTime.Split('/');
return (new DateTime(Convert.ToInt32(YMD[0]), Convert.ToInt32(YMD[1]), Convert.ToInt32(YMD[2]), new PersianCalendar()));
}
public bool IsConnectedToInternet()
{
bool flag;
int desc;
flag = InternetGetConnectedState(out desc, 0);
return flag;
}

hamid_hr
دوشنبه 15 شهریور 1395, 19:02 عصر
خب اون متغیر date1 که تو شرط گزاشتین رو برابر با تاریخ الان بزارین بعد براش شرط بزارید

Mahmoud.Afrad
دوشنبه 15 شهریور 1395, 20:24 عصر
متغیر date1 میلادی هست دیگه با توجه به اینکه از اینترنت گرفته میشه دقیق هم هست.
برای ذخیره در دیتابیس همین متغیر date1 رو ذخیره کنید.

davidrobert
سه شنبه 16 شهریور 1395, 00:26 صبح
مقدار date1 داره از اینترنت میگیره ویندوز 10 اگه تاریخ اش شمسی باشه مقدار تاریخ شمسی میگیره ذخیره میکنه نه میلادی مشکل من این هستش با ویندوز تاریخ به روز میگیره ولی ویندوز شمسی به روز میگیره و شمسی نشان میده.نه میلادی رو

mr.sirwan
سه شنبه 16 شهریور 1395, 00:34 صبح
خب دوست عزیز توو یکی از پست ها، یکی از دوستامون راه کار خوبی ارائه داده بودن، گفته بودن تاریخ رو چک کن ببین از 2000 کمتره؟ اگه کمتر بود، تبدیل نکن، در غیر اینصورت تبدیل کن

مشکلش چی بود؟ اصلا امتحان کردین؟

Mahmoud.Afrad
سه شنبه 16 شهریور 1395, 01:06 صبح
مقدار date1 داره از اینترنت میگیره ویندوز 10 اگه تاریخ اش شمسی باشه مقدار تاریخ شمسی میگیره ذخیره میکنه نه میلادی مشکل من این هستش با ویندوز تاریخ به روز میگیره ولی ویندوز شمسی به روز میگیره و شمسی نشان میده.نه میلادی رو

ببینید اینکه شمسی نشون میده اصلا مهم نیست. شما تاریخی که از اینترنت میگیری و در DateTime قرار میدی یک تاریخ میلادی خواهد بود و کافیه در ستونی از نوع datetime و یا datetime2 ذخیره کنید. اینکه ویندوز 10 تاریخ رو شمسی نشون میده مهم نیست. اگر میخواهید تاریخ در ویندوزهای قدیمی تر شمسی نشون داده بشه باید بعد از دریافت اطلاعات از دیتابیس ، تاریخ رو شمسی و نمایش بدید.

davidrobert
سه شنبه 16 شهریور 1395, 12:15 عصر
خب دوست عزیز توو یکی از پست ها، یکی از دوستامون راه کار خوبی ارائه داده بودن، گفته بودن تاریخ رو چک کن ببین از 2000 کمتره؟ اگه کمتر بود، تبدیل نکن، در غیر اینصورت تبدیل کن

مشکلش چی بود؟ اصلا امتحان کردین؟
بله اون کار انجام دادم.جواب نگرفتم. اینم کدش هستش.

private int yearValue;
public string datetime(DateTime _dateTime)
{
DateTime dateTime = DateTime.Now;
DateTime date1 = new DateTime();
if (IsConnectedToInternet())
{
if (date1.Year > 2000)
{
XmlDocument document = new XmlDocument();
document.Load("http://nist.time.gov/actualtime.cgi?lzbc=siqm9b");
if (document.DocumentElement != null)
{
var timeAttribute = document.DocumentElement.GetAttributeNode("time");
if (timeAttribute != null && timeAttribute.Value != null)
{
string time = timeAttribute.Value;
long milliseconds = Convert.ToInt64(time) / 1000;
date1 = new DateTime(1970, 1, 1).AddMilliseconds(milliseconds).ToLocalTime();
return date1.ToString("yyyy-mm-dd");
}
}
}
else if (date1.Year < 2000)
{
string date2 = dateTime.Year + "-" + dateTime.Month + "-" + dateTime.Day;
return date2.ToString();
}
}
// PersianCalendar pc = new PersianCalendar();


string date = dateTime.Year + "-" + dateTime.Month + "-" + dateTime.Day;
return date.ToString();
}
[DllImport("wininet.dll")]
private static extern bool InternetGetConnectedState(out int description, int reservedValue);
private static DateTime ToGregorianDateTime(string PersianDateTime)
{
GregorianCalendar GC = new GregorianCalendar();
string[] YMD = PersianDateTime.Split('/');
return (new DateTime(Convert.ToInt32(YMD[0]), Convert.ToInt32(YMD[1]), Convert.ToInt32(YMD[2]), new PersianCalendar()));
}
public bool IsConnectedToInternet()
{
bool flag;
int desc;
flag = InternetGetConnectedState(out desc, 0);
return flag;
}



ببینید اینکه شمسی نشون میده اصلا مهم نیست. شما تاریخی که از اینترنت میگیری و در DateTime قرار میدی یک تاریخ میلادی خواهد بود و کافیه در ستونی از نوع datetime و یا datetime2 ذخیره کنید. اینکه ویندوز 10 تاریخ رو شمسی نشون میده مهم نیست. اگر میخواهید تاریخ در ویندوزهای قدیمی تر شمسی نشون داده بشه باید بعد از دریافت اطلاعات از دیتابیس ، تاریخ رو شمسی و نمایش بدید.
نوع فیلد من تو دیتابیس nvarchar هستش برای تاریخ شمسی و برای تاریخ میلادی DateTime هستش میخوام شمسی هم داشته باشه باشم و شمسی رو هم همین طور برای کار. بلد نیستم تاریخ میلادی ذخیره کنم دیتابیس و موقع فراخونی به شمسی تبدیل کنم. و تو دیتابیس چون ویندوز 10 تاریخ شمسی هستش موقع فراخونی باز تاریخ میلادی شمسی تبدیل میشه نمایش میده نه میلادی و بخواد تبدیل کنه باز تاریخ به قاجار تبدیل میشه بخاطر همین میخوام تاریخ 2 تا جدا
گانه میلادی در Datetime ذخیره بشه و در nvarchar شمسی ذخیره بشه.

142422

Mahmoud.Afrad
سه شنبه 16 شهریور 1395, 18:50 عصر
دیگه مجبور شدم این نمونه رو برای ذخیره و بازیابی تاریخ بنویسم. تاریخ میلادی ذخیره میشه و در زمان بازیابی به شمسی هم تبدیل میشه.

davidrobert
چهارشنبه 17 شهریور 1395, 22:51 عصر
سلام آقا Mahmoud.Afrad (http://barnamenevis.org/member.php?71297-Mahmoud-Afrad) ممنون بابت سورس شرمنده هی مزاحم شما میشم وقت گران بها شما رو میگیرم. یک نگاه به این تصاویر و متنش بندازید.
شما این تصویر رو ببنید با متن داخل تصویر رو
142443
در این تصویر شما میبنید تاریخ میلادی اشتباه هستش برای سیستم و تاریخ صحیح رو برنامه به صورت شمسی و میلادی آورده.
در تصویر زیر تاریخ سیستم شمسی میباشد.
142444
در این تصویر میبنید تاریخ شمسی اشتباه هستش و برنامه صحیح تاریخ شمسی آورده و همین طور تبدیل تاریخ میلادی انجام نشده و شمسی تاریخ نشان میده و کد دست نخوره.
این سورس ببنید . میخوام وقتی اجرا شود label تاریخ اش میلادی باشه نه شمسی چه ایرادی در کد هستش سعی کردم از کد شما نمونه برداری کنم.
http://s7.picofile.com/file/8266623984/ChackDateCorrect.7z.html
ممنون از اینکه وقت تون در اختیار بنده قرار دادید ممنون میشم بهم بگید چیکار کنم وقتی فرم لود شد label1 تاریخ به روز میلادی باشه اگه سیستم شمسی بود یا میلادی به حالش فرق نکنه اگه این سورس اون این کار کند موقع اجرا میلادی فقط باشه ممنون میشم.اگه اینترنت بود از اینترنت تاریخ بگیره اگه وصل نبود به اینترنت تاریخ از سیستم بگیره الان کد شما رو اجرا کردم تو این سورس که قرار دادم به اینترنت وصل نبود برنامه خطا داد دستور بعد if اجرا نشود تاریخ میلادی سیستم بیاره.
اینترنت من یه آن قطع شد متوججه این موضوع شدم و این دستور اجرا نشود.

document.Load("http://nist.time.gov/actualtime.cgi?lzbc=siqm9b");

ممنونن بابت کمکتان شرمنده شما رو به زحمت انداختم.

Mahmoud.Afrad
پنج شنبه 18 شهریور 1395, 16:18 عصر
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}

private void Form1_Load(object sender, EventArgs e)
{
DateTime dt = ClsNeedCode.GetDateTime();
mtxtDate.Text = ClsNeedCode.ConvertDateTimeToShortPersianDate(dt);
label1.Text = dt.ToString(CultureInfo.InvariantCulture);
}

private void button1_Click(object sender, EventArgs e)
{

}
}


در ضمن قسمت
DateTime _dateTimeRegister;
public DateTime DateTimeRegister
{
get { return _dateTimeRegister; }
set { _dateTimeRegister = value; }
}

public string PersianDateRegister
{
get { return ClsNeedCode.ConvertDateTimeToShortPersianDate(_dat eTimeRegister); }
} مربوط به پروژه قبلی و مدل جدول دیتابیس بود و ربطی به این کلاس نداره پس حذف کنید.