在 Hijri 日历和公历之间转换日期






4.78/5 (58投票s)
2004年11月21日
2分钟阅读

287620

5316
在这个类中,我介绍了一种在两种日历之间转换日期的方法:伊斯兰历和公历。
引言
这个类的主要目标是在两种日历之间进行转换,这个类的主要优势在于它拥有大量重载函数。因此,您可以选择您需要的最佳格式。
Using the Code
首先,我定义了一个类型为System.Web.HttpContext
的变量cur
。这个变量将在函数执行期间显示任何错误,但您必须将Trace
设置为true
(在ASP.NET页面中),才能看到错误。
之后,我定义了一个类型为CultureInfo
的arCulture
。
CultureInfo
类表示有关特定文化的信息,您必须在类构造函数中通过提供文化标识符来指定此文化。例如,“ar-SA
”代表阿拉伯语-沙特阿拉伯。
我还定义了一个类型为HijriCalendar
的h
。这个变量代表HijriCalendar
类的实例。
现在,如何指定在特定文化中使用哪个日历,如果一个文化中存在多个日历?
arCul.DateTimeFormat.Calendar=h;
此外,我声明了一个数组allFormats
,其中包含传递日期时可能的主要格式,您也可以添加自己的格式。
这个数组在哪里起作用?
当我将string
转换为DateTime
格式时,我需要提供格式来匹配string
与日期。
DateTime tempDate=DateTime.ParseExact(hijri,allFormats,
arCul.DateTimeFormat,DateTimeStyles.AllowWhiteSpaces);
这个类中有两个主要函数参与日期转换
public string HijriToGreg(string hijri)
您必须以string
格式传递伊斯兰历日期,返回的string
是等效的公历日期,并且将采用“yyyyMMdd
”格式。如果您需要其他格式,则使用重载函数并将格式作为第二个参数传递。
第二个函数是
public string GregToHijri(string greg)
此函数与上述函数相反。它也针对格式进行了重载。
现在,对于类的其余部分,我添加了其他我认为在日期操作中很重要的函数,我为每个函数提供了一个简短且易于理解的说明。
部署
您必须将此类添加到ASP.NET C# Web项目中才能正确编译,然后在您的ASP.NET页面中实例化此类
Dates d=new Dates();
祝您好运!
////////////////////////////////////Attention///////////
///This library has been wrote by : Anas Reslan Bahsas
///if you are going to use it please dont remove this line .
///you have to add this class to a asp.net web project to work well.
///I will be grateful to receive any comments or
//suggestion to anasbahsas@hotmail.com
///////////////////////////////////////////////////////////
using System;
using System.Web;
using System.Diagnostics;
using System.Globalization;
using System.Data;
using System.Collections;
namespace Bahsas
{
/// <summary>
/// Summary description for Dates.
/// </summary>
public class Dates
{
private HttpContext cur;
private const int startGreg=1900;
private const int endGreg=2100;
private string[] allFormats={"yyyy/MM/dd","yyyy/M/d",
"dd/MM/yyyy","d/M/yyyy",
"dd/M/yyyy","d/MM/yyyy","yyyy-MM-dd",
"yyyy-M-d","dd-MM-yyyy","d-M-yyyy",
"dd-M-yyyy","d-MM-yyyy","yyyy MM dd",
"yyyy M d","dd MM yyyy","d M yyyy",
"dd M yyyy","d MM yyyy"};
private CultureInfo arCul;
private CultureInfo enCul;
private HijriCalendar h;
private GregorianCalendar g;
public Dates()
{
cur = HttpContext.Current;
arCul=new CultureInfo("ar-SA");
enCul=new CultureInfo("en-US");
h=new HijriCalendar();
g=new GregorianCalendar(GregorianCalendarTypes.USEnglish);
arCul.DateTimeFormat.Calendar=h;
}
/// <summary>
/// Check if string is hijri date and then return true
/// </summary>
/// <PARAM name="hijri"></PARAM>
/// <returns></returns>
public bool IsHijri(string hijri)
{
if (hijri.Length<=0)
{
cur.Trace.Warn("IsHijri Error: Date String is Empty");
return false;
}
try
{
DateTime tempDate=DateTime.ParseExact(hijri,allFormats,
arCul.DateTimeFormat,DateTimeStyles.AllowWhiteSpaces);
if (tempDate.Year>=startGreg && tempDate.Year<=endGreg)
return true;
else
return false;
}
catch (Exception ex)
{
cur.Trace.Warn("IsHijri Error :"+hijri.ToString()+"\n"+
ex.Message);
return false;
}
}
/// <summary>
/// Check if string is Gregorian date and then return true
/// </summary>
/// <PARAM name="greg"></PARAM>
/// <returns></returns>
public bool IsGreg(string greg)
{
if (greg.Length<=0)
{
cur.Trace.Warn("IsGreg :Date String is Empty");
return false;
}
try
{
DateTime tempDate=DateTime.ParseExact(greg,allFormats,
enCul.DateTimeFormat,DateTimeStyles.AllowWhiteSpaces);
if (tempDate.Year>=startGreg && tempDate.Year<=endGreg)
return true;
else
return false;
}
catch (Exception ex)
{
cur.Trace.Warn("IsGreg Error :"+greg.ToString()+"\n"+ex.Message);
return false;
}
}
/// <summary>
/// Return Formatted Hijri date string
/// </summary>
/// <PARAM name="date"></PARAM>
/// <PARAM name="format"></PARAM>
/// <returns></returns>
public string FormatHijri(string date ,string format)
{
if (date.Length<=0)
{
cur.Trace.Warn("Format :Date String is Empty");
return "";
}
try
{
DateTime tempDate=DateTime.ParseExact(date,
allFormats,arCul.DateTimeFormat,DateTimeStyles.AllowWhiteSpaces);
return tempDate.ToString(format,arCul.DateTimeFormat);
}
catch (Exception ex)
{
cur.Trace.Warn("Date :\n"+ex.Message);
return "";
}
}
/// <summary>
/// Returned Formatted Gregorian date string
/// </summary>
/// <PARAM name="date"></PARAM>
/// <PARAM name="format"></PARAM>
/// <returns></returns>
public string FormatGreg(string date ,string format)
{
if (date.Length<=0)
{
cur.Trace.Warn("Format :Date String is Empty");
return "";
}
try
{
DateTime tempDate=DateTime.ParseExact(date,allFormats,
enCul.DateTimeFormat,DateTimeStyles.AllowWhiteSpaces);
return tempDate.ToString(format,enCul.DateTimeFormat);
}
catch (Exception ex)
{
cur.Trace.Warn("Date :\n"+ex.Message);
return "";
}
}
/// <summary>
/// Return Today Gregorian date and return it in yyyy/MM/dd format
/// </summary>
/// <returns></returns>
public string GDateNow()
{
try
{
return DateTime.Now.ToString("yyyy/MM/dd",enCul.DateTimeFormat);
}
catch (Exception ex)
{
cur.Trace.Warn("GDateNow :\n"+ex.Message);
return "";
}
}
/// <summary>
/// Return formatted today Gregorian date based on your format
/// </summary>
/// <PARAM name="format"></PARAM>
/// <returns></returns>
public string GDateNow(string format)
{
try
{
return DateTime.Now.ToString(format,enCul.DateTimeFormat);
}
catch (Exception ex)
{
cur.Trace.Warn("GDateNow :\n"+ex.Message);
return "";
}
}
/// <summary>
/// Return Today Hijri date and return it in yyyy/MM/dd format
/// </summary>
/// <returns></returns>
public string HDateNow()
{
try
{
return DateTime.Now.ToString("yyyy/MM/dd",arCul.DateTimeFormat);
}
catch (Exception ex)
{
cur.Trace.Warn("HDateNow :\n"+ex.Message);
return "";
}
}
/// <summary>
/// Return formatted today hijri date based on your format
/// </summary>
/// <PARAM name="format"></PARAM>
/// <returns></returns>
public string HDateNow(string format)
{
try
{
return DateTime.Now.ToString(format,arCul.DateTimeFormat);
}
catch (Exception ex)
{
cur.Trace.Warn("HDateNow :\n"+ex.Message);
return "";
}
}
/// <summary>
/// Convert Hijri Date to it's equivalent Gregorian Date
/// </summary>
/// <PARAM name="hijri"></PARAM>
/// <returns></returns>
public string HijriToGreg(string hijri)
{
if (hijri.Length<=0)
{
cur.Trace.Warn("HijriToGreg :Date String is Empty");
return "";
}
try
{
DateTime tempDate=DateTime.ParseExact(hijri,allFormats,
arCul.DateTimeFormat,DateTimeStyles.AllowWhiteSpaces);
return tempDate.ToString("yyyy/MM/dd",enCul.DateTimeFormat);
}
catch (Exception ex)
{
cur.Trace.Warn("HijriToGreg :"+hijri.ToString()+"\n"+ex.Message);
return "";
}
}
/// <summary>
/// Convert Hijri Date to it's equivalent Gregorian Date
/// and return it in specified format
/// </summary>
/// <PARAM name="hijri"></PARAM>
/// <PARAM name="format"></PARAM>
/// <returns></returns>
public string HijriToGreg(string hijri,string format)
{
if (hijri.Length<=0)
{
cur.Trace.Warn("HijriToGreg :Date String is Empty");
return "";
}
try
{
DateTime tempDate=DateTime.ParseExact(hijri,
allFormats,arCul.DateTimeFormat,DateTimeStyles.AllowWhiteSpaces);
return tempDate.ToString(format,enCul.DateTimeFormat);
}
catch (Exception ex)
{
cur.Trace.Warn("HijriToGreg :"+hijri.ToString()+"\n"+ex.Message);
return "";
}
}
/// <summary>
/// Convert Gregoian Date to it's equivalent Hijir Date
/// </summary>
/// <PARAM name="greg"></PARAM>
/// <returns></returns>
public string GregToHijri(string greg)
{
if (greg.Length<=0)
{
cur.Trace.Warn("GregToHijri :Date String is Empty");
return "";
}
try
{
DateTime tempDate=DateTime.ParseExact(greg,allFormats,
enCul.DateTimeFormat,DateTimeStyles.AllowWhiteSpaces);
return tempDate.ToString("yyyy/MM/dd",arCul.DateTimeFormat);
}
catch (Exception ex)
{
cur.Trace.Warn("GregToHijri :"+greg.ToString()+"\n"+ex.Message);
return "";
}
}
/// <summary>
/// Convert Hijri Date to it's equivalent Gregorian Date and
/// return it in specified format
/// </summary>
/// <PARAM name="greg"></PARAM>
/// <PARAM name="format"></PARAM>
/// <returns></returns>
public string GregToHijri(string greg,string format)
{
if (greg.Length<=0)
{
cur.Trace.Warn("GregToHijri :Date String is Empty");
return "";
}
try
{
DateTime tempDate=DateTime.ParseExact(greg,allFormats,
enCul.DateTimeFormat,DateTimeStyles.AllowWhiteSpaces);
return tempDate.ToString(format,arCul.DateTimeFormat);
}
catch (Exception ex)
{
cur.Trace.Warn("GregToHijri :"+greg.ToString()+"\n"+ex.Message);
return "";
}
}
/// <summary>
/// Return Gregrian Date Time as digit stamp
/// </summary>
/// <returns></returns>
public string GTimeStamp()
{
return GDateNow("yyyyMMddHHmmss");
}
/// <summary>
/// Return Hijri Date Time as digit stamp
/// </summary>
/// <returns></returns>
public string HTimeStamp()
{
return HDateNow("yyyyMMddHHmmss");
}
/// <summary>
/// Compare two instances of string date
/// and return indication of their values
/// </summary>
/// <PARAM name="d1"></PARAM>
/// <PARAM name="d2"></PARAM>
/// <returns>positive d1 is greater than d2,
/// negative d1 is smaller than d2, 0 both are equal</returns>
public int Compare(string d1,string d2)
{
try
{
DateTime date1=DateTime.ParseExact(d1,allFormats,
arCul.DateTimeFormat,DateTimeStyles.AllowWhiteSpaces);
DateTime date2=DateTime.ParseExact(d2,allFormats,
arCul.DateTimeFormat,DateTimeStyles.AllowWhiteSpaces);
return DateTime.Compare(date1,date2);
}
catch (Exception ex)
{
cur.Trace.Warn("Compare :"+"\n"+ex.Message);
return -1;
}
}
}
}
许可证
本文未附加明确的许可证,但可能在文章文本或下载文件本身中包含使用条款。如有疑问,请通过下面的讨论区联系作者。
作者可能使用的许可证列表可以在此处找到。