View Full Version : تاریخ شمسی در ویندوز موبایل
molana alavi
یک شنبه 29 خرداد 1390, 00:06 صبح
PersianCalendar ظاهرا در ویندوز فریم ورک ویندوز موبایل نیست چجوری می تونم معادل تاریخ شمسی یه تاریخ میلادی رو بدست بیارم؟
یه تقویم شمسی تو آدرس زیر پیدا کردم اما منبعی نتونستم پیدا کنم
http://www.dihav.com/pro.html?id=pdt
powerboy2988
یک شنبه 29 خرداد 1390, 08:19 صبح
از این کلاس می تونی استفاده کنی :
using System;
using System.Collections.Generic;
using System.Text;
using System.Windows.Forms;
namespace PDA.Persian_date
{
public class PersianDate
{
public string todayShamsi()
{
DateTime today;
today = DateTime.Today;
string year = today.Year.ToString();
string month = today.Month.ToString();
string day = today.Day.ToString();
int Y = int.Parse(year);
int M = int.Parse(month);
int D = int.Parse(day);
return Shamsi(Y, M, D);
}
public string Shamsi(int Y, int M, int D)
{
if (Y == 0)
Y = 2000;
if (Y < 100)
Y = Y + 1900;
if (Y == 2000)
{
if (M > 2)
{
DateTime Temp = new DateTime(Y, M, D);
Temp = Temp.AddDays(1);
Y = int.Parse(Temp.Year.ToString());
M = int.Parse(Temp.Month.ToString());
D = int.Parse(Temp.Day.ToString());
}
}
if (M < 3 || (M == 3 && D < 21))
Y = Y - 622;
else Y = Y - 621;
switch (M)
{
case 1: if (D < 21)
{
M = 10;
D = D + 10;
}
else
{
M = 11;
D = D - 20;
}
break;
case 2: if (D < 20)
{
M = 11;
D = D + 11;
}
else
{
M = 12;
D = D - 19;
}
break;
case 3:
if (D < 21)
{
M = 12;
D = D + 9;
}
else
{
M = 1;
D = D - 20;
}
break;
case 4:
if (D < 21)
{
M = 1;
D = D + 11;
}
else
{
M = 2; D = D - 20;
}
break;
case 5:
if (D < 22)
{
M = M - 3;
D = D + 10;
}
else
{
M = M - 2;
D = D - 21;
}
break;
case 6:
if (D < 22)
{
M = M - 3;
D = D + 10;
}
else
{
M = M - 2;
D = D - 21;
}
break;
case 7:
if (D < 23)
{
M = M - 3;
D = D + 9;
}
else
{
M = M - 2;
D = D - 22;
}
break;
case 8:
if (D < 23)
{
M = M - 3;
D = D + 9;
}
else
{
M = M - 2;
D = D - 22;
}
break;
case 9:
if (D < 23)
{
M = M - 3;
D = D + 9;
}
else
{
M = M - 2;
D = D - 22;
}
break;
case 10:
if (D < 23)
{
M = 7;
D = D + 8;
}
else
{
M = 8;
D = D - 22;
}
break;
case 11:
if (D < 22)
{
M = M - 3;
D = D + 9;
}
else
{
M = M - 2;
D = D - 21;
}
break;
case 12:
if (D < 22)
{
M = M - 3;
D = D + 9;
}
else
{
M = M - 2;
D = D - 21;
}
break;
}
string month = "00";
string day = "00";
if (M < 10)
{
month = "0" + M;
}
else
{
month = M.ToString();
}
if (D < 10)
{
day = "0" + D;
}
else
{
day = D.ToString();
}
return Y.ToString() + "/" + month + "/" + day;
}
}
}
molana alavi
یک شنبه 29 خرداد 1390, 23:09 عصر
ممنون که جواب دادین
واسه تست اینکه آیا تاریخ های شمسی رو درست جواب میده یا نه یه کد نوشتم که همه تاریخ های محاسبه شده توسط این الگوریتم و تاریخ های محاسبه شده توسط PersianCalendar خود دات نت رو باهم مقایسه می کرد که نتیجه این شد که خیلی از تاریخ ها رو این الگوریتم مثل چند تا الگوریتم دیگه ای که تو اینترنت پیدا کردم اشتباه محاسبه می کنه و ظاهرا اصلا نمیشه بهش اعتماد کرد
بازم قطعا می گردم و اگه پیدا کردم راه حل رو حتما اینجا می زارم
powerboy2988
یک شنبه 29 خرداد 1390, 23:37 عصر
جدا؟
چه تاریخ هایی؟
چون منم تست کردم... اما به مشکل برنخوردم... لطفا بگو
molana alavi
جمعه 17 تیر 1390, 11:52 صبح
تاریخ 2009/1/14 کد بالا تاریخ شمسی 1387/10/24 رو میده اما PersianCalendar تاریخ 1387/10/25
تاریخ 2012/3/17 کد بالا تاریخ شمسی 1390/12/26 رو میده اما PersianCalendar تاریخ 1390/12/27
تاریخ 2012/6/28 کد بالا تاریخ شمسی 1391/4/7 رو میده اما PersianCalendar تاریخ 1391/4/28
و ...
molana alavi
پنج شنبه 14 دی 1391, 19:46 عصر
سلام
این هم تقویم فارسی که همانند PersianCalendar دات نت اصلی هستش و کاملا هم تست شده البته از تاریخ 1016 تا 9000 شمسی رو ساپورت میکنه به علت کمبود وقت دنبال بقیش نرفتم
کد اصلی تبدیل تاریخ ها رو هم از یه بنده خدائی به اسم آقای سیکارودی گرفتم البته بقیش هم چیزی نداشت فقط تست بود
یه سال گذشت!!!!!!
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.