PDA

View Full Version : تبدیل رشته1386/6/9 به رشته1386/06/09



ameysams
دوشنبه 02 مهر 1386, 01:44 صبح
با سلام خدمت سروران غزیز چگونه باید رشته1386/6/9را به رشته ی1386/.6/.9 تبدیل نمود؟
باتشکر

choobin84
دوشنبه 02 مهر 1386, 04:27 صبح
از تابع split استفاده کنید

PC2st
دوشنبه 02 مهر 1386, 04:43 صبح
DateTime dt = new DateTime(2004, 2, 12);
this.Text = dt.ToString("MM/dd/yyyy");

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

برای تاریخ فارسی، میتونید از این متد استفاده کنید:


private string ChangeDateStyle(string date)
{
string[] elements = date.Split('/');
if(elements.Length != 3 || elements[0].Length != 4 || elements[1].Length > 2 || elements[2].Length > 2)
{
throw new FormatException();
}
for(int i = 1; i < 3; i++)
{
if(elements[i].Length == 1)
{
elements[i] = "0" + elements[i];
}
else if(elements[i].Length == 0)
{
throw new FormatException();
}
}
return elements[0] + "/" + elements[1] + "/" + elements[2];
}

و مثلا برای استفاده از آن:


MessageBox.Show(ChangeDateStyle("1386/4/3"));

mahani
دوشنبه 02 مهر 1386, 08:33 صبح
اینم ساده ترین راهش


string str = "9/6/1386";
if (str[1] == '/')
str = str.Insert(0, "0");
if (str[4] == '/')
str = str.Insert(3, "0");

ameysams
دوشنبه 02 مهر 1386, 13:13 عصر
اینم ساده ترین راهش


string str = "9/6/1386";
if (str[1] == '/')
str = str.Insert(0, "0");
if (str[4] == '/')
str = str.Insert(3, "0");


با تشکر از پاسخ شما اما رشته به صورت 6/9/1386 است

delbarir
دوشنبه 02 مهر 1386, 14:40 عصر
اینم ساده ترین راهش


string str = "9/6/1386";
if (str[1] == '/')
str = str.Insert(0, "0");
if (str[4] == '/')
str = str.Insert(3, "0");


فکر کنم منظور چیز دیگه ای باشه مثلا اگه بخوایم 25/9/1386 رو به 25/09/1386 تبدیل کنیم چی؟
به نظر من باید تو رشته دنبال / بگردیم و اونو به سه تا رشته روز، ماه و سال تبدیل کنیم و اونوفق فرمت روز و ماه رو 2 حرفی کنیم (9 به 09) و بعد دوباره اونا رو با / به هم بچسبونیم

PC2st
دوشنبه 02 مهر 1386, 15:54 عصر
اون متدی که نوشته بودم اینکار ها رو میکنه، فقط کمی پیاده سازیش خوب نبود که اون رو هم درست کردم:


private static string FixDate(string date)
{
string[] elements = date.Split('/');

if(elements.Length != 3)
{
throw new FormatException("Date format is not valid.");
}

if(elements[0].Length != 4)
{
throw new FormatException("Year is not a 4 digit number.");
}

for(int i = 1; i < 3; i++)
{
if(elements[i].Length == 1)
{
elements[i] = "0" + elements[i];
}
else if(elements[i].Length == 0 || elements[i].Length > 2)
{
throw new FormatException("Day or Month is not valid.");
}
}

return string.Join("/", elements);
}

و مقادیر زیر بعنوان ورودی مجاز هست:


Console.WriteLine(FixDate("1386/12/3"));
Console.WriteLine(FixDate("1386/04/3"));
Console.WriteLine(FixDate("1386/4/03"));

مقادیر زیر مجاز نیست و خطای مرتبط با اشتباه انجام شده هم گزارش میشه:


1386/4/333
1386//3
1386/4/333
1386/4/
386/4/3
1386/3

فقط یک چیزی که هست، اینه که به معتبر بودن تاریخ کاری نداره...

mahani
دوشنبه 02 مهر 1386, 17:06 عصر
فکر کنم منظور چیز دیگه ای باشه مثلا اگه بخوایم 25/9/1386 رو به 25/09/1386 تبدیل کنیم چی؟
به نظر من باید تو رشته دنبال / بگردیم و اونو به سه تا رشته روز، ماه و سال تبدیل کنیم و اونوفق فرمت روز و ماه رو 2 حرفی کنیم (9 به 09) و بعد دوباره اونا رو با / به هم بچسبونیم
پست قبلیه من همین حالت رو هم جواب میده فقط بر عکسه (همه حالتها رو جواب میده)

با تشکر از پاسخ شما اما رشته به صورت 6/9/1386 است
درستش این میشه


string str = "1386/9/6";
if (str[6] == '/')
str = str.Insert(5, "0");
if (str.Length == 9)
str = str.Insert(8, "0");