PDA

View Full Version : مبتدی: تغییر تاریخ و زمان سیستم



sajaaaaad
چهارشنبه 12 آذر 1393, 22:12 عصر
با سلام خدمت دوستان عزیز، میدونم سوال تکراریه ولی من با روش هایی که گفته شده بود نتونستم به جواب برسم.
من توی برنامه میخوام همون اول سال، ماه، روز، ساعت و دقیقه رو از کاربر بگیرم، اونم به صورت شمسی و بعد از تبدیل کردن به میلادی تاریخ سیستم رو به اون تاریخ ببرم. تا جای تبدیلشو انجام داد ولی باقیش جواب نمیده. :گریه:
private void btnOk_Click(object sender, EventArgs e) {
Year = Int32.Parse(txtYearsSh.Text);
Mon = Int32.Parse(txtMonSh.Text);
Day = Int32.Parse(txtDaySh.Text);
Saat = Int32.Parse(txtSaat.Text);
Daghighe = Int32.Parse(txtDaghighe.Text);


System.Globalization.PersianCalendar x = new System.Globalization.PersianCalendar();
DateTime DateTime1 = x.ToDateTime(Year, Mon, Day, Saat, Daghighe, 0, 0);
}

sajaaaaad
چهارشنبه 12 آذر 1393, 22:16 عصر
کدهایی که دیدم نوشته باید تاریخ universal باشه..! یعنی چی؟ وقتی تاریخو universal میکنم خراب میشه. یعنی تاریخ اشتباه میشه من این کارو کردم جواب نداد:گریه:
[DllImport("kernel32.dll")]static extern bool SetSystemTime(ref SYSTEMTIME time);
[StructLayoutAttribute(LayoutKind.Sequential)]
private struct SYSTEMTIME
{
public short year;
public short month;
public short dayOfWeek;
public short day;
public short hour;
public short minute;
public short second;
public short milliseconds;
}


private void ChangeDateAndTime(DateTime NewTime)
{
SYSTEMTIME st;
st.year = (short)NewTime.Year;
st.month = (short)NewTime.Month;
st.dayOfWeek = (short)NewTime.DayOfWeek;
st.day = (short)NewTime.Day;
st.hour = (short)NewTime.Hour;
st.minute = (short)NewTime.Minute;
st.second = (short)NewTime.Second;
st.milliseconds = (short)NewTime.Millisecond;
//Call API
SetSystemTime(ref st);
}


private void btnOk_Click(object sender, EventArgs e)
{
Year = Int32.Parse(txtYearsSh.Text);
Mon = Int32.Parse(txtMonSh.Text);
Day = Int32.Parse(txtDaySh.Text);
Saat = Int32.Parse(txtSaat.Text);
Daghighe = Int32.Parse(txtDaghighe.Text);


System.Globalization.PersianCalendar x = new System.Globalization.PersianCalendar();
DateTime DateTime1 = x.ToDateTime(Year, Mon, Day, Saat, Daghighe, 0, 0);


DateTime DateTime2 = new DateTime(DateTime1.Year, DateTime1.Month, DateTime1.Day, Saat, Daghighe, 0, 0).ToUniversalTime();
ChangeDateAndTime(DateTime2);
}

sajaaaaad
چهارشنبه 12 آذر 1393, 22:24 عصر
اونجایی که نوشته call API من باید چیزی بنویسم.؟ در ضمن من ویندوز 8.1 دارم و میخواستم بدون فرقی داره سیستم عامل یا نه..؟ مثلا روی ایکس پی امکان داره کارکنه ولی رو ویندوز هشت اینا جواب نده.؟
با تشکر فراوان. (فوری فقط) :افسرده:

مهرداد صفا
پنج شنبه 13 آذر 1393, 11:37 صبح
با سلام.
برای تغییر تاریخ و زمان می تونید از توابع:


Microsoft.VisualBasic.DateAndTime.DateString

Microsoft.VisualBasic.DateAndTime.TimeString استفاده کنید.
اسمبلی Microsoft.VisualBasic رو باید قبلا به reference اضافه کنید.

sajaaaaad
پنج شنبه 13 آذر 1393, 14:26 عصر
آقا مهرداد میشه یکمی بیشتر توضیح بدی.؟ الان اگ اون DataString و TimeString تابع اند، مگه نباید بعدشون پرانتز بذارم که آرگومان ورودی بگیرن.؟ ولی پرانتز قبول نمیکنه.! یکمی توضیح بدی منون میشم.
با تشکر

rasoolf
پنج شنبه 13 آذر 1393, 15:29 عصر
آقا مهرداد میشه یکمی بیشتر توضیح بدی.؟ الان اگ اون DataString و TimeString تابع اند، مگه نباید بعدشون پرانتز بذارم که آرگومان ورودی بگیرن.؟ ولی پرانتز قبول نمیکنه.! یکمی توضیح بدی منون میشم.
با تشکر

شاید این لینک کمکت کنه (http://stackoverflow.com/questions/650849/change-system-date-programatically)

مهرداد صفا
پنج شنبه 13 آذر 1393, 21:00 عصر
آقا مهرداد میشه یکمی بیشتر توضیح بدی.؟ الان اگ اون DataString و TimeString تابع اند، مگه نباید بعدشون پرانتز بذارم که آرگومان ورودی بگیرن.؟ ولی پرانتز قبول نمیکنه.! یکمی توضیح بدی منون میشم.
با تشکر
سلام.
خیر. می بخشید. static property هستند که باید مقدار بهشون بدید. مثل:


Microsoft.VisualBasic.DateAndTime.DateString = @"12/5/2014";

sajaaaaad
جمعه 14 آذر 1393, 15:21 عصر
آقا مهرداد جواب نداد این دستور! :-( تنها دستوری که من دیدم خیلی خوب عمل میکنه دستور Date داخل CMD یه..! اول میزنی date بعدش تاریخ رو نشون میده و اگ تاریخ جدید بدی خیلی راحت تاریخ سیستم رو ست میکنه. برای زمانم دستور time داره. حالا یه سوال.؟ چطور میشه من دستوراتمو از توی سی شارپ بفرستم برای cmd اجرا کنه. باید دو مرحله ای هم باشه.
یعنی من هم date رو بدم بعد خودش اینتر کنه و بعد اون تاریخو بدم مثلا 2014-16-11 به این ترتیب تاریخ عوض میشه. حالا اینو چکار میشه کرد؟ راهکاری ندارن دوستان.؟

مهرداد صفا
یک شنبه 16 آذر 1393, 23:31 عصر
آقا مهرداد جواب نداد این دستور!

سلام.
چطوری امتحان کردید؟ به چه خطایی بر خوردید؟ برنامه باید تحت ADMIN اجرا بشه! بهتره که حداقل VS رو run as admin کنید..
برای اجرای فرمان cmd از کلاس System.Diagnostics.Process استفاده کنید. فایل CMD.EXE رو اجرا کنید و با StandardInput و StandardOutput ورودی و خروجی های بعدی رو get و set کنید.