65.9K
CodeProject 正在变化。 阅读更多。
Home

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

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.78/5 (58投票s)

2004年11月21日

2分钟阅读

viewsIcon

287620

downloadIcon

5316

在这个类中,我介绍了一种在两种日历之间转换日期的方法:伊斯兰历和公历。

引言

这个类的主要目标是在两种日历之间进行转换,这个类的主要优势在于它拥有大量重载函数。因此,您可以选择您需要的最佳格式。

Using the Code

首先,我定义了一个类型为System.Web.HttpContext的变量cur。这个变量将在函数执行期间显示任何错误,但您必须将Trace设置为true(在ASP.NET页面中),才能看到错误。

之后,我定义了一个类型为CultureInfoarCulture

CultureInfo类表示有关特定文化的信息,您必须在类构造函数中通过提供文化标识符来指定此文化。例如,“ar-SA”代表阿拉伯语-沙特阿拉伯。

我还定义了一个类型为HijriCalendarh。这个变量代表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;
            }
        }
    }
}

许可证

本文未附加明确的许可证,但可能在文章文本或下载文件本身中包含使用条款。如有疑问,请通过下面的讨论区联系作者。

作者可能使用的许可证列表可以在此处找到。

© . All rights reserved.