PDA

View Full Version : سوال: تبدیل رشته به تاریخ شمسی



دلتنگ اسمان
سه شنبه 29 اردیبهشت 1394, 13:07 عصر
با سلام
مقادیر رشته ای را از کاربر میگیرم(یعنی همون تاریخ ). حالا میخوام اون رو به فرمت تاریخ شمسی داشته باشم. مثلا ورودی :1394/02/19 هستش معادل این رو با فرمت PersianCalendar میخوام.
دلیلش هم اینه که وقتی از کاربر میگیرم در داخل یه حلقه یکی یکی بهش اضافه کنم تا به روز مورد نظرم برسم. با کد زیر به فرمت میلادی میده که میشه به شمسی تبدیل کرد. اما بدون اضافه کاری میخوام مستقیما به تاریخ شمسی تبدیل کنم:
DateTime dt = pc.ToDateTime(int.Parse(y), int.Parse(m), int.Parse(d), 0, 0, 0, 0);

Fotofan
سه شنبه 29 اردیبهشت 1394, 17:14 عصر
خب با این دستور اونو به DateTime تبدیل بکن...


Convert.ToDateIME("1394/5/3")


الان رسته بهش دادی اونم بهت تاریخ میده...

در ضمن به این صورت عمل بکن


int Year=pc.getYear(ShamsiDate);
int Month=pc.getMonth(ShamsiDate);
و.....



ShamsiDate همون تاریخت میشه که از رسته به تاریخ تبدیل کردی

DateTime dt = pc.ToDateTime(Year, Month, Day, 0, 0, 0, 0);

دلتنگ اسمان
چهارشنبه 30 اردیبهشت 1394, 12:51 عصر
ممنون از توجهتون اما این متد .ToDateIME رو من ندارم. این متد رو خودتون تعریف کردین؟ یا توی فریم ورک بالاتری هستش من ندارم؟

pouria_bayat
چهارشنبه 30 اردیبهشت 1394, 12:56 عصر
سلام از این متد استفاده کنید:


public static DateTime ConvertPersianDate(string persianDate)
{
DateTime persianDateTime;
if (persianDate != null && persianDate!= "")
{
CultureInfo persianCulture = new CultureInfo("fa-IR");
persianDateTime = DateTime.ParseExact(persianDate, "yyyy/MM/dd", persianCulture);
return persianDateTime;
}
else
{

// پیغام خطا
}
}

دلتنگ اسمان
چهارشنبه 30 اردیبهشت 1394, 13:17 عصر
ممنون. خطا میده:
The DateTime represented by the string is not supported in calendar System.Globalization.GregorianCalendar
خودم مجبور شدم اینطوری بنویسم :

DateTime dtMiladi = persianCal.ToDateTime(int.Parse(comboBox2.Text), int.Parse(comboBox6.Text),
int.Parse(comboBox1.Text), 0, 0, 0, 0).AddDays(1);
string datsh = miladiToShamsi(dtMiladi);



string miladiToShamsi(DateTime datetime)
{
string shamsi = "";
System.Globalization.PersianCalendar pc = new System.Globalization.PersianCalendar();
if (datetime != null)

shamsi = pc.GetYear(datetime) + "/" + pc.GetMonth(datetime) + "/" + pc.GetDayOfMonth(datetime);

return shamsi;
}

RmeXXXXXXXXX
چهارشنبه 30 اردیبهشت 1394, 13:24 عصر
نبدیل رشته به تاریخ: البته اگه به ترتیب سال روز و ماه وارد شده باشن:

string[] values= yourDateString.Split('/');
int y=int.Parse(values[0]);
int m= int.Parse(values[1])
int d=int.Parse(values[2]);
var dt=new DateTime(y,m,d, new System.Globalization.PersianCalendar());

شرمنده اگه غلط املایی داره چون دستی همین جا نوشتمش.
بعد dt رو بریز تو متد زیر و از خروجیش لذت ببر

using System.Globalization;

public static string ToPersianDateString(this DateTime dt)
{
var pr = new PersianCalendar();
return string.Format("{1}{0}{2}{0}{3}",
CultureInfo.CurrentCulture.DateTimeFormat.DateSepa rator,
pr.GetYear(dt).ToString("0000"), pr.GetMonth(dt).ToString("00"), pr.GetDayOfMonth(dt).ToString("00"));
}