using System;
using System.Data;
using System.Data.SqlClient;
using System.Data.SqlTypes;
using Microsoft.SqlServer.Server;
using System.Globalization;
[Serializable]
[Microsoft.SqlServer.Server.SqlUserDefinedType(Format.Native)]
public struct JalaliDate : INullable
{
public override string ToString()
{
if (m_Null)
{
return "";
}
else
{
return string.Format("{0}-{1}-{2}", year, month, day);
}
}
public bool IsNull
{
get
{
// Put your code here
return m_Null;
}
}
public static JalaliDate Null
{
get
{
JalaliDate h = new JalaliDate();
h.m_Null = true;
return h;
}
}
public static JalaliDate Parse(SqlString s)
{
if (string.IsNullOrEmpty(s.Value))
return JalaliDate.Null;
JalaliDate u = new JalaliDate();
string[] values = s.Value.Split(new char[] { '-' });
u.year = int.Parse(values[0]);
u.month = int.Parse(values[1]);
u.day = int.Parse(values[2]);
// Put your code here
return u;
}
public DateTime GregorianValue
{
get
{
PersianCalendar pc = new PersianCalendar();
DateTime dt = new DateTime(year, month, day, pc);
return dt;
}
}
public static JalaliDate JalaliValue(DateTime gregorianValue)
{
PersianCalendar pc = new PersianCalendar();
int y, m, d;
y = pc.GetYear(gregorianValue);
m = pc.GetMonth(gregorianValue);
d = pc.GetDayOfMonth(gregorianValue);
JalaliDate ans = new JalaliDate();
ans.year = y;
ans.month = m;
ans.day = d;
return ans;
}
public JalaliDate AddDays(int days)
{
return JalaliValue(GregorianValue.AddDays(day));
}
private int year;
private int month;
private int day;
// Private member
private bool m_Null;
}